2017-03-22 4 views
0

http 프로토콜을 사용하여 DataPower에서 Azure 서비스 버스에 메시지를 게시하려고합니다. 당신이 Shared Access Signatures (SAS) 또는 Access Control Service를 사용하는 경우 내가 권한이없는 오류가 발생하고 이후 어떻게 내가 여기DataPower - Azure 서비스 버스 통합

감사

을 붙어있어 이후 401

도와주세요 자격 증명을 전달한다

+0

"응답 요청 된 자원에 적용 가능한 챌린지를 포함하는 WWW-Authenticate 헤더 필드를 포함해야합니다. "라는 응답 헤더 필드"WWW-Authenticate "에는 무엇이 들어 있습니까? –

답변

0

나는 해결책을 찾아 냈다. 아래는 SAS 인증 토큰을 얻는 방법입니다. A :

  1. 4 개 매개 변수를 필요로하는 자바 모듈을 사용하여 IIB에서 SAS 토큰을 생성합니다. Azure 서비스 버스의 리소스 URI b. 키 c. 키 이름 d. 만료 시간.
  2. 는 MQRFH2 헤더에있는 SAS 토큰을 설정하고 데이터 파워
  3. 추출 SAS 토큰 아래 XSLT를 사용하여 데이터 파워에서 HTTP POST 요청에 대한 인증 헤더로 설정을 보낼 수 있습니다.

    [401 상태 코드에 위키 (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_errors)로부터

+0

XSLT가 없습니다 ... : o – Anders

+0

이전 게시물에서 추가했지만 포럼에 표시되지 않았습니다. 나는 abhi88

0

이 (ACS에 의존) 서비스 버스.

SAS를 사용하는 것이 좋습니다.

Azure Node.js SDK에는 DataPower GatewayScript에서 처리 할 수없는 많은 fs (파일 시스템) 호출이 있으므로 사용할 수 없습니다. 난 그냥 당신이 필요로하는, 그래서 다른 프로젝트에서 코드를 뽑아 한

'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

:

이것은 내가 헤더를 만들 GatewayScript로 SAS에 사용한 어디 선가 발견 조각이다 일부 처리기 및 GatewayScript 프레임 워크를 추가하려면 ...

+0

SAS 토큰을 생성했으며 Authorization 헤더 값으로 SAS 토큰을 설정 한 후 DataPower에서 Azure Service Bus로 요청을 게시합니다. 하지만 나는 여전히 권한이 없다고 말하는 401 오류가 발생합니다. 어쨌든 Azure 서비스 버스에서 수신 된 SAS 토큰을 확인 하시겠습니까? – abhi88

+0

서비스에서 DataPower Probe (MPGW?)를 활성화하면 최종 단계를 선택하고 헤더 탭을 보면 보낸 헤더를 볼 수 있습니다. 그러면 Azure로 전송되는 내용이 표시됩니다. – Anders

0

이 공식에 대해 언급 한 것처럼 서비스 버스 인증 및 인증 :

응용 프로그램은 공유 액세스 서명 (SAS) 인증, 또는 (또한 액세스 제어 서비스 또는 ACS라고도 함) 푸른 Active Directory의 액세스 제어을 통해 중 하나를 사용하여 하늘빛 서비스 버스에 인증 할 수 있습니다.

SAS 그것은 서비스 버스에 대한 간단한 유연하고 사용하기 쉬운 인증 방식을 제공하기 때문에, ACS 이상을 권장합니다. 응용 프로그램은 허가 된 "사용자"의 개념을 관리 할 필요가없는 시나리오에서 SAS를 사용할 수 있습니다.

1) 공유 액세스 서명

토큰의 형식은 다음과 같습니다

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

를 사용하여 HTTP 수준에서 공유 액세스 서명() 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 

자세한 내용은 개발 언어에 따라 SAS 토큰을 생성하는 데 대한 tutorial을 참조하십시오.

2) 액세스 제어 서비스 (ACS)

는 다음과 같이 New-AzureSBNamespace PowerShell을 cmdlet을 사용하여 네임 스페이스를 만들어야합니다

: 자세한 내용은

enter image description here

,이 blog를 참조 할 수 . 보내는 메시지

사용 ACS :

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

는 SWT 토큰보기에 대한 자세한 내용은

enter image description here

토큰 SWT를 구축,이 blog 및 참조 수 이 tutorial은 ACS에서 토큰을 요청하는 방법에 관한 것입니다.