首页 > 解决方案 > 从 IdentityServer4 获取 id_token?

问题描述

我对 IdentityServer4 服务器进行了以下流程设置:

    services.AddAuthentication(options =>
        {
            options.DefaultScheme = "Cookies";
            options.DefaultChallengeScheme = "oidc2";
        })
        .AddCookie("Cookies")
        .AddOpenIdConnect("oidc2", options =>
        {
            options.SignInScheme = "Cookies";

            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;

            options.ClientId = "mvc";
            options.ClientSecret = "secret";
            options.ResponseType = "code id_token";

            options.SaveTokens = true;
            options.GetClaimsFromUserInfoEndpoint = true;

            options.Scope.Add("api1");
            options.Scope.Add("offline_access");
            options.ClaimActions.MapJsonKey("website", "website");

        });

哪个工作正常,用户已正确验证。

我想访问响应中的 id_token 以便我可以看到用户显示名称。

我怎么做?我环顾四周 HttpContext.User 但没有找到太多。

标签: .netasp.net-mvcoauth-2.0identityserver4

解决方案


如果用户通过了正确的身份验证,那么在 MVC 控制器中,您将能够将用户强制转换为 aClaimsPrincipal并访问用户的声明:

ClaimsPrincipal user = User as ClaimsPrincipal;
Claim nameClaim = user.FindFirst("name");
string name = nameClaim.Value

推荐阅读