2

Visual Studio 2017で作成されたデフォルトのASP.NETコアWebサイトがあります。私はAzure Active Directoryを使用して認証することを選択しました。 サイトを実行し、Active Directoryのアカウントを使用して正常にログインできます。ASP.NETコアがAzure Active Directoryで認証され、要求ごとにカスタムクレームを永続化する

Active Directoryで提供される申し立て情報を取得できます。次の行を呼び出すと、私は '名前'を取得します。

User.Claims.FirstOrDefault(c => c.Type == "name")?.Value; 

ログインしたユーザーに対してカスタム請求 - CompanyId = 123456を追加したいとします。 カスタムクレームを追加することはできますが、クレームが設定されているページでのみ使用できます。

Claim claim = new Claim("CompanyId", "123456", ClaimValueTypes.String); 
((ClaimsIdentity)User.Identity).AddClaim(claim); 

私の理解では、私は何とかActive Directoryによって発行されたトークンを更新したり、トークンが発行される前に、請求を設定する必要があるということです。私はこれを行う方法がわかりません。

私はこれは私が(https://github.com/ahelland/AADGuide-CodeSamples/tree/master/ClaimsWebApp含む)このシナリオについての多数の記事やサンプルを読んだ

// GET: /Account/SignIn 
[HttpGet] 
public IActionResult SignIn() 
{ 
    return Challenge(
      new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectDefaults.AuthenticationScheme); 
} 

SIGNIN()でAccountControllerに行われる必要がある疑いが存続する方法を解決するために管理していませんリクエストにまたがって申し立てを行う

答えて

5

OnTokenValidatedはあなたに修正する機会を提供しています..私は認証プロバイダとしてASP.NETアイデンティティを使用してカスタムクレームを永続化するために成功裏に管理しているが、これは、カスタムクレームがデータベースに保存されているためであると思わ

private Task TokenValidated(TokenValidatedContext context) 
{ 
    Claim claim = new Claim("CompanyId", "123456", ClaimValueTypes.String); 
    (context.Ticket.Principal.Identity as ClaimsIdentity).AddClaim(claim); 

    return Task.FromResult(0); 
} 

設定OpenIdConnectEvents:入ってくるトークンから得られClaimsIdentityは、以下のコードは、あなたの参考のためにある

Events = new OpenIdConnectEvents 
{ 
    OnRemoteFailure = OnAuthenticationFailed, 
    OnAuthorizationCodeReceived = OnAuthorizationCodeReceived, 

    OnTokenValidated = TokenValidated 
} 
次に、コントローラで使用

:詳細をご希望の方は

var companyId= User.Claims.FirstOrDefault(c => c.Type == "CompanyId")?.Value; 
1

を提供するコードを設定する方法でStartup.cs

内に配置され/編集を追加:

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    ClientId = Configuration["Authentication:AzureAd:ClientId"], 
    Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
    CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"], 
    Events = new OpenIdConnectEvents 
    { 
     OnTokenValidated = TokenValidated 
    } 
}); 

プライベートTask TokenValidatedメソッドはStartup.csの本体にあります

次のサンプルは参考になります。 https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore-v2/blob/master/WebApp-OpenIDConnect-DotNet/Startup.cs

関連する問題