1

私はうまく私を認証するように思わアイデンティティ2.を使用してWeb APIを持っている、と/Tokenエンドポイントはかなりのような内容で、私はAuthTicketインスタンスにデシリアライズ何を返します。私はリクエストを送信するときに、次にIdentity 2のASP.NET Web APIで保護されたリソースにアクセスできないのはなぜですか?

AccessToken: "averylongtoken" 
Expires: {2016/12/12 8:19:22 AM} 
ExpiresIn: 1209599 
Issued: {2016/11/28 8:19:22 AM} 
TokenType: "bearer" 
Username: "myusername" 

以下のような:

var response = await Client.GetAsync("api/appt/3/true", cancellationToken); 

Client.DefaultRequestHeaders.Authorization次のようになります。

Bearer theSameVeryLongToken

私はまだ401 - Not authorizedを取得します。ここで何が間違っているのでしょうか? Web APIが何らかの形でベアラトークンを受け取っていないか、適切に解読していないことがありますか? APIでブレークポイントを設定し、コントローラアクション内のUserプロパティを調べると、そのプロパティはすべてnullまたはデフォルトですが、1つのClaimsIdentityがあり、そのプロパティもすべてnullまたはデフォルトであり、そのClaimsコレクションは空です。

すべてのクレームを手作業で設定する必要がありますか?私はApplicationOAuthProvider.GrantResourceOwnerCredentialsは、少なくともユーザー名やIDなどのクレームを追加すると思っていただろう。

+1

Fiddlerでリクエストを実行した場合、リクエストヘッダーにトークンが渡されていますか?また、GrantResourceOwnerCredentialsメソッドのOAuthProviderクラスのRequest Contextには何が表示されますか? – Jinish

+0

何らかの理由で、私のAPI URLでキャプチャされたリクエストが表示されません。フィルタをホスト 'localhost:51999'のみに設定し、クライアントからの投稿要求を実行すると何もキャプチャされません。 'GrantResourceOwnerCredentials'にはリクエストコンテキストがなく、' OAuthGrantResourceOwnerCredentialsContext'だけがあり、 '/ Token'エンドポイントから呼び出されたこのメソッドではありません。これは、ユーザに署名するためです。これはすべて正常に動作します。ログイン時に '/ Token'からの正式な返答を認証トークンとともに返信しますが、まだ' GrantResourceOwnerCredentials'のヘッダには含まれません。 – ProfK

答えて

0

もう一度すべてのコードを確認しましたが、何らかの形で認証トークンを要求ヘッダーに追加した行が失われました。リクエストを送信する前にこれらのヘッダーを検査することでこれを容易に確認でき、簡単に修正できました。

関連する問題