请求访问令牌时 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
我正在使用隐式授权类型,当我请求“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