6

webapiRESTベースのサイトからデータを取得するモバイルアプリケーションを作成しようとしています。

サイトはACSを介して保護する必要があります(複数のIDプロバイダーが存在する可能性があるため)。

私のモバイルアプリは現在、次のURLhttps ://xx.accesscontrol.windows.net/v2/metadata/IdentityProviders.js?protocol=javascriptnotify & realm=http://xx.azurewebsites.net/&version=1.0をクエリしてリストを取得していますIPの。

次に、ユーザーがIPを選択できるようにし、Webブラウザーコントロールを使用してログインを表示します。

ユーザーがログインしたら、応答をキャプチャしてトークンを抽出しますが、今は何をすべきかよくわかりません。トークンは次のようになります:-

{"appliesTo":"http://****.azurewebsites.net/",
"context":null,
"created":1362069383,
"expires":1362072983,
"securityToken":"... a lot of text:-)",
"tokenType":"urn:ietf:params:oauth:token-type:jwt"}

だから、私はsecurityTokenの部分を取り、getリクエストにAuthorizationヘッダーの一部を追加する必要があると思いますか?

質問1は、トークンをどのように添付する必要があるかです。セキュリティトークンビットを添付するだけですか、それともロットをbase 64エンコードして、Authorizationヘッダーとして再度添付する必要がありますか?

質問2JWTを処理するようにwebapiを構成するにはどうすればよいですか?ACSを変更してJWTトークンを発行し、JWTSecurityTokenHandlerをインストールした後も、次のエラーが発生します(これはパッシブ認証の場合です)。

 JWT10310: Unable to validate signature. validationParameters.SigningTokenResolver type: 'System.IdentityModel.Tokens.IssuerTokenResolver', was unable to resolve key to a token.
 The SecurityKeyIdentifier is: 
 'SecurityKeyIdentifier
    (
    IsReadOnly = False,
    Count = 1,
    Clause[0] = X509ThumbprintKeyIdentifierClause(Hash =  0x2FEE3EE96B019D4BA0C046124B77C652EEF768E5)
    )
 '. validationParameters.SigningToken was null.

ありがとう

ロス

4

1 に答える 1

8

Azure 認証ライブラリは使用していませんが、この AAL コード サンプルは、新しいJWT トークン ハンドラーを使用して、要求パイプラインで HTTP メッセージ ハンドラーを使用して Web API への要求を認証する方法を示すのに役立ちます。このコードは、ACS によって発行された JWT を明示的に処理します。特に、 のTokenValidationHandlerクラスを見てくださいGlobal.asax.cs。流れは次のようになります。

  1. クライアント アプリからの着信要求は、メッセージ ハンドラーによって検査されます。
  2. Authorization ヘッダーは、JWTTokenHandler を使用して検査および検証されます。
  3. JWT トークンが有効な場合、JWTTokenHandler は新しい ClaimsPrincipal オブジェクトをインスタンス化します。トークンが有効でない場合、HTTP 401 Unauthorized 応答が返されます。

最初の質問に戻ると、 のような認証ヘッダーを作成するには、"securityToken"値 (のようなもの) が必要です。これがリクエストで Web API に渡されると、JWTTokenHandler はメッセージ ハンドラを介してそれを検証します。もちろん、これは、最初に ACS からトークンを取得するために使用した ACS テナントとセキュリティ ドメインを認識できるように、Web API が適切に構成されていることを前提としています。eyJ0eXAiOiJK...Authorization: Bearer eyJ0eXAiOiJK...

編集:REST サービスを保護し、モバイル アプリからそれらにアクセスするためのパターンとプラクティスのガイダンスをご覧ください。より多くのコンテキストを提供するのに役立つ可能性のある非常によく似たシナリオです。

于 2013-03-09T03:18:59.217 に答える