2017-03-24 2 views
1

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を追加しようとしました。残念ながら、これも呼び出されていません。

ここから行く方法について誰にでも教えてください。

おかげで、 ビナイTC

答えて

0

私が正しく問題を理解(そして多分私はそうではない)場合は、payload.audプロパティは、各要求を変更していると言っているように、それが聞こえますか?

今の

、ここで私が検証で使用されるhostUriの知っているものです:<SourceLocation>要素の最初のインスタンスと一致しないhostUriを提供する場合は、あなたのマニフェストXMLで定義されているよう

、token.Validate()コールは失敗します。

token生の形式の文字列は、.で区切られた3つのbase64エンコードオブジェクトです。

  1. ヘッダー - JSONオブジェクト列
  2. ペイロード - JSONオブジェクト列
  3. 署名 - Exchangeサーバ上X509証明書を使用して、ヘッダおよびペイロードセクションのハッシュ。

あなたhostUriは(あなたが=文字を追加することによって、4の長さを国防省するパッドにそれを必要とする場合があります)、も生token文字列を検査し、ペイロード部分をデコードすべきかわからない場合。

ペイロードJSONオブジェクトを調べると、audという名前のプロパティが表示されます。 audの値は、hostUriに使用するUriです。

だから、

あなたは生のトークンをキャプチャすることができれば、あなたが必要なhostUriを取得するには、以下のJavaScriptを使用することができます。

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

関連する問題