身份服务器 4:在 asp.net webform .NET 4.5 上获取访问令牌

Identity server 4: get access toke on asp.net webform .NET 4.5

我正在使用 Identity serve4 进行用户身份验证和授权,我的一个客户是 asp.net 在 .NET 4.5 上编写的网络表单。当用户尝试访问受保护的网络表单时,我将用户重定向到身份服务器进行身份验证。但是在身份验证之后,有一个基于当前登录用户标识的逻辑,为了获取当前用户登录信息,我必须调用一些需要令牌的令牌端点?登录后我检查了网络表单,发现有一些身份验证 cookie。现在我的问题是如何从中获取令牌?在 asp.net 核心上,我们使用下面的 httpcontext 方法获得访问令牌,但我们如何在 asp.net 网络表单上使用 .NET 4.5 获得相同的访问令牌?

var access_token = await HttpContext.GetTokenAsync("access_token")

最简单的方法是在身份验证后将访问令牌保存在 cookie 中。将客户端的代码改成这样:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                
                ResponseType = "id_token token",
                Scope = "openid profile api1",
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    SecurityTokenValidated = n =>
                    {
                        n.AuthenticationTicket.Identity.AddClaim(new Claim("access_token", n.ProtocolMessage.AccessToken));
                        return Task.FromResult(0);
                    },
                }
            });

然后您可以从当前用户的声明中检索 access_token,如下所示:

var accessToken = user.FindFirst("access_token").Value;

我在这里详细解释了它:https://nahidfa.com/posts/identityserver4-and-asp-.net-mvc/#call-an-authorized-api-endpoint-using-access-token

编辑:

要设置 Identity.Name 添加此代码:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                ...
                TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    NameClaimType = "name"
                }, // This is to set Identity.Name                 
            });