2017-07-05 4 views
0

私は、IdentityServer4を介して保護されたAPIを呼び出す方法を理解しようとしています。IdentityServer4 - MVCからユーザーとしてAPIを呼び出す

基本的には、次のサイトがあります。 - IdentityServerアプリケーション、 - Web API、 - クライアントWebアプリケーション。

私の設定は、IdentityServerのサンプルhereとまったく同じです。

私は、クライアントWebアプリケーションを表すClientと、Web Web Apiを表すAPIResourceを定義します。

私のクライアントWebアプリケーションから、WebAPIへのHTTP呼び出しを行いたいが、私はログインしているユーザーであるかのように見せたいので、Web Apiで 'email'スコープを利用できるようにしたい。

私は、Webアプリケーション内からやっている方法は、「access_tokenは」をつかむために、およびWeb APIに渡すことです:

var accessToken = await httpContextAccessor.HttpContext.Authentication.GetTokenAsync($"access_token"); 
      var client = new HttpClient(); 
      client.SetBearerToken(accessToken); 

これは私のクライアントを呼び出すことができますので、承認ステップは機能していますが、Web APIのユーザークレームには適切なスコープがありません。

何か間違っていますか?

答えて

0

access_tokenには、IdentityServer4にクレーム情報を含めることができます。必要なクレームは、ApiResource定義で指定する必要があります。

それ以外の場合は、要求と共にJWT id_tokenを送信する必要があります。

new ApiResource(ApiResourceNames.SomeApiAccess, "Access to some api.", new List<string>(){ 
        new IdentityResources.OpenId().Name, 
        new IdentityResources.Profile().Name, 
        new IdentityResources.Email().Name 
       }), 
0

あなたはどのようにあなたのWeb APIを設定しなかった

app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions 
{ 
    Authority = "https://demo.identityserver.io", 
    ApiName = "api1", 

    AllowedScopes = { "api1.read", "api1.write" } 
}); 

のようなあなたのウェブAPIでスコープを追加することができますか?それでもコードが動作しない場合は、コードを投稿してください!

関連する問題