2017-03-22 5 views
0

Je tente d'envoyer des messages au bus de service Azure à partir de DataPower à l'aide du protocole HTTP. Comment dois-je transmettre les informations que je reçois une erreur non autorisée 401.DataPower - Intégration du bus de service Azure

S'il vous plaît aider depuis que je suis coincé ici

Merci

+0

de [wikipedia sur le code d'état 401] (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors) « La réaction doit inclure un champ d'en-tête WWW-Authenticate contenant un défi applicable à la ressource demandée ", que contient ce champ d'en-tête de réponse" WWW-Authenticate "? –

Répondre

0

J'ai trouvé la solution. Voici comment je réalise le jeton d'authentification SAS.

  1. Générer un jeton SAS dans IIB en utilisant un module Java qui nécessite 4 paramètres: a. URI de ressource du bus de service Azure b. Légende c. Nom de clé d. Expiration en quelques secondes
  2. le jeton SAS Définir l'en-tête MQRFH2 et envoyer à DataPower
  3. Extrait tête SAS jeton et défini comme autorisation de requête HTTP POST en utilisant le DataPower ci-dessous xslt.

+0

Il n'y a pas de XSLT ...: o – Anders

+0

Je l'ai ajouté dans le post précédent mais il n'est pas affiché dans le forum. J'ai collé à nouveau ci-dessous abhi88

0

Cela dépend si vous utilisez Shared Access Signatures (SAS) ou Access Control Service (ACS) pour vous Bus de service.

Je recommande d'utiliser SAS! Malheureusement, le SDK Azure Node.js a beaucoup d'appels fs (système de fichiers) que DataPower GatewayScript ne peut pas gérer, nous ne pouvons donc pas l'utiliser.

Ceci est un extrait que je trouve quelque part que je l'ai utilisé pour SAS GatewayScript pour créer les en-têtes:

'use strict'; 
 

 
var crypto = require('crypto'); 
 

 
// ServiceBus parameters 
 
var namespace = '<Your-ServiceBus-Namespace>'; 
 
var queue ='<Your-Queue>'; 
 
var AccessKeyName = '<Your-AccessKey-Name>'; 
 
var AccessKey = '<Your-AccessKey>'; 
 

 

 
// Full ServiceBus Queue publisher URI 
 
var ServiceBusUri = 'https://' + namespace + '.servicebus.windows.net' + '/' + queue; 
 
    
 
function createSASToken(uri, keyName, key) 
 
{ 
 
    //Token expires in December 
 
    var expiry = '1417774602'; 
 
    var crypto = require('crypto'); 
 

 
    var signedString = encodeURIComponent(uri) + '\n' + expiry; 
 
    var hmac = crypto.createHmac('sha256', key); 
 
    hmac.update(signedString); 
 
    var signature = hmac.digest('base64'); 
 
    var token = 'SharedAccessSignature sr=' + encodeURIComponent(uri) + '&sig=' + encodeURIComponent(signature) + '&se=' + expiry + '&skn=' + keyName; 
 
    
 
    return token; 
 
} 
 
    
 
var SASToken = createSASToken(ServiceBusUri, AccessKeyName, AccessKey) 
 
console.log(SASToken); 
 

 
var options = { 
 
     hostname: namespace + '.' + 'servicebus.Windows.net', 
 
     port: 443, 
 
     path: '/' + queue + '/messages', 
 
     method: 'POST', 
 
     headers: { 
 
      'Authorization': SASToken, 
 
      'Content-Type': 'application/atom+xml;type=entry;charset=utf-8', 
 
     } 
 
    }; 
 

 
// GatewayScript url-open() goes here... 
 

 
// End

Je viens tiré le code d'un autre projet si vous avez besoin pour ajouter quelques gestionnaires et le cadre de GatewayScript là-dessus ...

+0

J'ai généré un jeton SAS et j'envoie la requête de DataPower à Azure Service Bus après avoir défini le jeton SAS comme valeur d'en-tête Authorization. Mais je reçois toujours une erreur 401 disant que je suis non autorisé. Est-il possible de voir le jeton SAS reçu sur Azure Service Bus – abhi88

+0

En activant DataPower Probe dans votre service (MPGW?), Vous pouvez voir les en-têtes envoyés si vous avez choisi l'étape finale et que vous regardez dans l'onglet En-têtes. Cela vous montrera ce qui est envoyé à Azure. – Anders

0

Comme ce fonctionnaire document mentionné au sujet de l'authentification et de l'autorisation de bus de service:

Les applications peuvent authentifier sur Azure Service Bus utilisant Signature Shared Access (SAS) authentification, ou par Azure Active Access Directory contrôle (également connu sous le nom d'accès au service de contrôle ou ACS).

SAS est recommandé sur ACS, car il offre une simple, flexible et système d'authentification facile à utiliser pour le service de bus. Les applications peuvent utiliser SAS dans des scénarios dans lesquels ils n'ont pas besoin de gérer la notion d'un «utilisateur» autorisé.

1) Accès partagé Signature

Le jeton est dans le format suivant:

SharedAccessSignature sig=<signature-string>&se=<expiry>&skn=<keyName>&sr=<URL-encoded-resourceURI>

Utilisez l'accès partagé Signature (au niveau HTTP) pour sending message:

POST http{s}://<yournamespace>.servicebus.windows.net/<path>/messages 
Authorization: SharedAccessSignature sr=https%3A%2F%2F<yournamespace>.servicebus.windows.net%2F<path>&sig=<your-signature>&se=1438205742&skn=KeyName 
ContentType: application/atom+xml;type=entry;charset=utf-8 

Pour plus de détails, vous pouvez vous référer à ce tutorial pour générer le jeton SAS en fonction de votre langage de développement.

2) d'accès au service de contrôle (ACS)

vous devez créer l'espace de noms en utilisant l'applet de commande New-AzureSBNamespace PowerShell comme suit:

enter image description here

Pour plus de détails, vous pouvez consulter cette blog .

Utiliser ACS pour l'envoi de messages:

POST http{s}://<yournamespace>.servicebus.windows.net/<path>/messages 
Authorization: WRAP access_token={swt} 
ContentType: application/atom+xml;type=entry;charset=utf-8 

construire un SWT jeton

enter image description here

Pour plus de détails sur l'obtention d'un jeton de SWT, vous pouvez consulter cette blog et ce tutorial sur la façon de demander un jeton d'ACS.