2

IdentityServer 3 ではSecurityTokenValidated、通知のイベントを使用して、名前とクレームで自分の ID を構築しました。たとえば、access_token後で n API にアクセスするために、次のようなリソース オーナー ワークフローを使用して保存します。

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
AuthenticationType = "oidc",

// ...

Notifications = new OpenIdConnectAuthenticationNotifications
{
    SecurityTokenValidated = async n =>
    {
        var nid = new ClaimsIdentity(
          n.AuthenticationTicket.Identity.AuthenticationType,
          "name",
          ClaimTypes.Role);
        nid.AddClaim(new Claim("id_token", n.ProtocolMessage.IdToken));
        nid.AddClaim(new Claim("access_token", n.ProtocolMessage.AccessToken));
        nid.AddClaim(new Claim("expires_at", DateTimeOffset.Now.AddSeconds(int.Parse(n.ProtocolMessage.ExpiresIn)).ToString()));
    }
}
}

ASP.NET Core の IdentityServer 4 には Notifications プロパティはありません。多くのクレームが自動的に生成されていることがわかりaccess_tokenますが、ID のユーザー名も自動的に設定されません

ASP.NET Core のクライアントの現在の構成は次のようになります

   app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {
            AuthenticationScheme = "oidc",
            SignInScheme = "Cookies",
            Authority = identityServerUri,
            RequireHttpsMetadata = false,
            ClientId = clientId,
            ResponseType = "id_token token",
            Scope =
            {
                "openid profile email warehouseapi"
            },
            GetClaimsFromUserInfoEndpoint = true,
            SaveTokens = true,
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
        });

これを行うためにIdentityServer 4で意図された方法は何ですか?

4

2 に答える 2

2

これは実際には IdentityServer4 とは関係ありません。これは、OWIN と AspNetCore バリアントの認証ミドルウェアの違いです。

これらの通知の名前がより正確になりましたEvents

次を使用して同様のことができます。

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    AuthenticationScheme = "oidc",
    SignInScheme = "Cookies",

    Authority = "https://demo.identityserver.io",
    PostLogoutRedirectUri = "http://localhost:3308/",
    ClientId = "hybrid",
    ClientSecret = "secret",
    ResponseType = "code id_token",
    GetClaimsFromUserInfoEndpoint = true,
    SaveTokens = true,

    Events = new OpenIdConnectEvents
    {
        OnTokenValidated = async n =>
        {

        }
    }
});

ここですべての素敵なイベントを見つけることができます。

于 2016-10-18T16:56:49.833 に答える