2017-01-11 4 views
4

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サイトのレイアウト」というレンガの壁に衝突しても問題は解決しません。

+1

私は今日同じ問題に直面しています。そして、私の場合、私が持っているaccess_tokenは間違っていました。私は、HttpContext.Authentication.GetAuthenticateInfoAsync( "oidc")の実行を使用して有効なトークンを取得しています。 – valverde93

+0

私はバージョンコントロールがありますので、文字通り何も変更していないことがわかりましたが、今は動作します。私はHybridWithClientCredentialsからHybridにフローを変更しましたが、HybridWithClientCredentials GetStringAsyncに戻ってもそれが正常に動作します。一方、UserInfoClientにはまだこのバグがあります。 私は非常に混乱しています... – nikovn

答えて

0

それはあなたがまたのようなクライアントアプリケーション上の請求のリストを取得することができますおそらく答えることは少し遅れだが、それでもこの時にひっかかっている人のために、これを試してください---

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 

var client = new HttpClient(); 

client.SetBearerToken(accessToken); 

var userInfoClient = new UserInfoClient("http://localhost:5000/connect/userinfo"); 

var response = await userInfoClient.GetAsync(accessToken); 
var claims = response.Claims; 

-

var claims = HttpContext.User.Claims.ToList(); 

エンドポイントを呼び出さずに。

関連する問題