2

​​私はAzure AD資格情報で自分のアプリケーションにサインインできます。Azure ADユーザー情報(JWTベアラトークンとASP.NET Core 2 WebApi)

私のフロントエンドで私はXamarin.Formsを使用しています。 バックエンドで私はASP.NET Core 2.0 WebApiを使用しています。

バックエンド:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
     } 

     app.UseAuthentication(); 

     app.UseMvc(); 
    } 

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 

     services.AddAuthentication(o => 
     { 
      o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
      o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
     }).AddJwtBearer(options => 
     { 
      options.Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]); 
      options.Audience = Configuration["AzureAd:Audience"]; 
     }); 
    } 

それはかなり簡単です。

私のフロントエンドでは、私の資格情報を記入し、access_tokenを求めています。

{ 
"token_type": "Bearer", 
"scope": "user_impersonation", 
"expires_in": "3600", 
"ext_expires_in": "0", 
"expires_on": "1507104075", 
"not_before": "1507100175", 
"resource": "my_resource", 
"access_token": "my_access_token", 
"refresh_token": "my_refresh_token" 
} 

私はbearer my_access_token認証セットでヘッダに埋めていaccess_tokenは。

私のaccess_tokenの情報で自動的にクレームが設定されるため、My Apiは私のすべての情報を知っています。この情報は、Azure ADによって提供されています。 (氏名、名字、姓など)

しかし、この情報はフロントエンドでどのように取得できますか?

答えて

0

GitHubのactive-directory-dotnet-native-desktopサンプルをチェックアウトすることができます。

私は、デスクトップアプリケーションでADAL.NETを使用してサービスのトークンを取得する方法を示します。 Xamarinフォームクライアントに合わせる必要がありますが、原則は認証に関する限り同じです。 また、このサービスにはサービスが含まれており、自分のサービスで置き換えて、リソースIDをASP.NETウィザードを使用して作成したアプリケーションの1つに変更することで、Web APIのトークンを取得します(サンプルのreadme.md)で説明したようにAzureのポータルは

アイデアは、あなたが最初に

result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectUri, ...) 

ADAL.Net line 92 of TodoListClient/MainWindow.xaml.csを使用してトークンを取得することで、その後、あなたはトークンベアラとして使用line 121

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 
0

必要な情報がすべてアクセストークンに含まれている場合は、クライアント上のアクセストークンをデコードするだけで済みます。

How to decode JWT Token?

Decoding and verifying JWT token using System.IdentityModel.Tokens.Jwt

そして、あなたはまた、より多くのユーザー情報が必要な場合は、リフレッシュすることができます:アクセストークンがJWTあり、次のスレッドのようなアクセストークンをデコードするための研究用のサンプルコードに簡単です。 Microsoft Graphのアクセストークンを呼び出し、Microsoft Graphのmeエンドポイントを呼び出します(here参照)。次に、リフレッシュトークンを使用してアクセストークンを更新する方法についてのドキュメントを示します。

Refreshing the access tokens

関連する問題