OAuth2、OpenId Connect、およびクレームベースの認証について詳しく知るために、IdentityServer4をテストしています。しかし、いくつかのサンプルコードは奇妙な動作をしていますが、私はその理由を理解できません。クライアントからのIdentityServer4 docの例のUserInfoエンドポイントにアクセスできない
私の理解から、ユーザーデータにアクセスする権限が与えられると、クライアントはデータを含むUserInfoエンドポイントに手を差し伸べることができますなどの請求、IdentityServer4で
としてのドキュメントは、我々がtrueに設定をお勧めしても設定
GetClaimsFromUserInfoEndpoint
ことがあります。
私はIdentityServer4スタートアップガイドに従っており、すべてが一点まで完璧に動作します。 This Quickstartには、提供されているサンプルコードが含まれていますが、私は何か明白でなく、コードが必要でないことが分かっていると仮定しています。
実行しているサーバーのOpenIDの設定ページに基づいて、エンドポイントのUserInfoが http://localhost:5000/connect/userinfoに位置しており、私はブラウザ経由でアクセスしようとしたとき、私は私がログインしてると主張ナビゲーションバーが、身体を見ていますページのプロンプトが表示されます。私はlocalhost:5000(IdentityServer4)にログインしていますが、localhost:5002でクライアント用に取得したuserIdトークンを送信していないためです。
は、だから私は私のクライアントアプリケーションに次のコードを書いた:
ここpublic async Task<IActionResult> GetData()
{
var accessToken = HttpContext.Authentication.GetTokenAsync("access_token").Result;
HttpClient client = new HttpClient();
client.SetBearerToken(accessToken);
var userInfo = await client.GetStringAsync("http://localhost:5000/connect/userinfo");
return Content(userInfo);
}
私はそれが接続するクライアントアプリケーションによってサンプルプロジェクトの他の場所で使われているようGetTokenAsync(「access_tokenは」)が動作する必要があることを知っていますAPIにしかし、私がやっているレスポンスは、IdentityServerのレイアウトページとログインプロンプトです。
私の間違いが何であり、UserInfoエンドポイントにアクセスする方法はありますか?
編集:削除スレッドブロッキング私はそれがこのコードがつまり簡易版、持っている必要があることが判明したので、
[OK]を見知らぬ人に恥ずかしいテストコードを表示しないように:まだ
UserInfoClient uic = new UserInfoClient("http://localhost:5000", idToken);
var result = await uic.GetAsync();
return Content(JsonConvert.SerializeObject(result.Claims));
をUserInfoClient内のカプセル化されたコードでも、「ユーザーのエンドポイントデータはなく、サンプルWebサイトのレイアウト」というレンガの壁に衝突しても問題は解決しません。
私は今日同じ問題に直面しています。そして、私の場合、私が持っているaccess_tokenは間違っていました。私は、HttpContext.Authentication.GetAuthenticateInfoAsync( "oidc")の実行を使用して有効なトークンを取得しています。 – valverde93
私はバージョンコントロールがありますので、文字通り何も変更していないことがわかりましたが、今は動作します。私はHybridWithClientCredentialsからHybridにフローを変更しましたが、HybridWithClientCredentials GetStringAsyncに戻ってもそれが正常に動作します。一方、UserInfoClientにはまだこのバグがあります。 私は非常に混乱しています... – nikovn