请求访问令牌时 Owin 未通过身份验证

Owin not authenticated when requesting access token

我正在使用隐式授权类型,当我请求“id_token 令牌”作为响应类型时,我的 HttpContext.Current.User 在登录后为空,这让我相信 owin 内部出现了问题。如果我只有“id_token”作为响应类型,那很好。我需要告诉 owin 某处获取访问令牌吗?

作为参考,我使用 .Net Framework 作为我的客户端和 identityserver4。

为了能够通过浏览器获取令牌,您需要在 IdentityServer 中的客户端配置中设置 AllowAccessTokensViaBrowser = true

                new Client
                {
                    ...

                    AllowedGrantTypes = GrantTypes.Implicit,
                    AllowAccessTokensViaBrowser = true,

                    ...
                },

并且在 MVC 客户端的启动中,您可以将 access_token 添加为对用户的声明:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                ...
                ResponseType = "id_token token",             

                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    SecurityTokenValidated = n =>
                    {
                        n.AuthenticationTicket.Identity.AddClaim(new Claim("access_token", n.ProtocolMessage.AccessToken));
                        
                        return Task.FromResult(0);
                    }
                }
            });

我有完整的工作样本here