2017-03-24 1 views
1

office.js Office.context.mailbox.getUserIdentityTokenAsync ((결과)를 사용하여 얻은 JWT 토큰의 유효성을 검사하려는 경우 사용자의 고유 ID를 가져와 다음과 같이 추가하기 위해 자체 JwtSecurityTokenHandler를 구현했습니다. 요청에 대한 소유권을 주장 할 수 있습니다. 따라서 우리는 모든 기능에서 사용자를 인증 할 수 있습니다.잠재 고객 URI 유효성 검사가 실패했습니다. 사용자가 일치하지 않음

그러나 우리는 JWT 토큰을 인증 할 수 없습니다. 다음 invalidAudienceURi 예외가 발생합니다. 그러나 토큰을 디코딩 할 때 사용 된 URI 이 쿼리 문자열은 office.js에 의해 동적으로 주입됩니다.

예외 :

Microsoft.Exchange.WebServices.Auth.Validation.InvalidTokenAudienceException was unhandled by user code 
    HResult=-2146233088 
    Message=Audience URI validation failed. Audience does not match. 
    Source=Microsoft.Exchange.WebServices.Auth 
    StackTrace: 
     at Microsoft.Exchange.WebServices.Auth.Validation.AppIdentityToken.ProcessToken(Uri extensionServiceHost, String key) in \\REDMOND\EXCHANGE\BUILD\E15\15.00.0913.000\SOURCES\sources\dev\EwsManagedApi\src\Auth\Validation\ClientExtensionIdentityToken.cs:line 220 
     at Microsoft.Exchange.WebServices.Auth.Validation.AppIdentityToken.Validate(Uri extensionServiceHost, String catchedKey) in \\REDMOND\EXCHANGE\BUILD\E15\15.00.0913.000\SOURCES\sources\dev\EwsManagedApi\src\Auth\Validation\ClientExtensionIdentityToken.cs:line 185 
     at Microsoft.Exchange.WebServices.Auth.Validation.AppIdentityToken.Validate(Uri extensionServiceHost) in \\REDMOND\EXCHANGE\BUILD\E15\15.00.0913.000\SOURCES\sources\dev\EwsManagedApi\src\Auth\Validation\ClientExtensionIdentityToken.cs:line 155 
     at UatWork.Web.CustomTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken) in C:\Users\vinay\Source\Workspaces\UatWork-O365\Development\UatWork\src\UatWork.Web\Startup.cs:line 176 
     at Microsoft.AspNet.Authentication.JwtBearer.JwtBearerHandler.<HandleAuthenticateAsync>d__1.MoveNext() 

이미지 : 예외 및 사용자 정의 핸들러 시도

enter image description here

해결 방법 1 : 우리는 ValidateAudience 메서드를 재정의하려고 노력했다. 하지만 런타임에이 메소드 ID는 절대 실행되지 않습니다. 해결책 2 시도 : 우리는 jwttoken 처리기에 대한 옵션으로 AudienceValidator를 추가하려고했습니다. 불행히도 이것은 불리지 않았습니다.

여기에서 어떻게 갈 지 말해 줄 사람이 있습니까?

감사합니다, 인 Vinay TC

답변

0

내가 문제를 제대로 이해하고 (그리고 어쩌면 내가하지를 않습니다) 당신이 payload.aud 속성은 각 요청을 변화 말하고있는 것처럼, 그것은 소리가 나는 경우에?

지금은

, 여기에 내가 유효성 검사에 사용되는 hostUri 알고있는 작업은 다음과 같습니다는 A <SourceLocation> 요소의 첫 번째 인스턴스와 일치하지 않는 hostUri을 제공 한 경우 매니페스트 XML에 정의 된

의 token.Validate() 통화가 실패합니다.

원시 형식의 token 문자열은 .으로 분리 된 3 개의 base64 인코딩 된 객체입니다.

  1. 헤더 - JSON 객체 문자열
  2. 페이로드 - JSON 객체 문자열
  3. 서명 - 교환 서버에서 X509의 인증서를 사용하여 헤더와 페이로드 섹션의 해시.

당신이 당신의 hostUri 될, 원시 token 문자열을 검사 페이로드 부분을 디코딩해야하는지 모르는 경우 (당신이 그것을 밖으로 = 문자를 추가하여 4 길이를 MOD하는 패드에해야 할 수도 있습니다).

페이로드 JSON 개체를 검사하면 aud이라는 속성이 표시됩니다. aud의 값은 hostUri에 사용해야하는 Uri입니다. 당신은 원시 토큰을 캡처 할 수있는 경우


그래서, 당신은 필요한 hostUri를 얻기 위해 다음과 같은 자바 스크립트를 사용할 수 있습니다 작동

var rawTokenString = "..."; //insert actual raw token string! 
var rawPayload = rawTokenString.split('.')[1]; 
while(rawPayload.length % 4 !=0) { 
    rawPayload+='='; 
} 
var payload = JSON.parse(atob(rawPayload)); 
console.info(payload.aud); 

희망을 ...

Inside the Identity Token

관련 문제