【发布时间】:2021-10-06 02:06:24
【问题描述】:
我使用核心身份的标准模板创建了一个 IdentityServer4 IDP。我希望有一个外部提供商退出 ADFS 2016 服务器。我已将此添加到 Startup.cs 中的 AddAuthentication()
services.AddAuthentication()
.AddOpenIdConnect("adfs", "ADFS", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.Authority = "[AuthURL]";
options.ClientId = "[ClientId]";
options.ResponseType = "id_token token code";
options.Scope.Add("profile");
options.Scope.Add("email");
options.CallbackPath = "/signin-adfs";
options.SignedOutCallbackPath = "/signout-callback-adfs";
options.RemoteSignOutPath = "/signout-adfs";
options.ClaimActions.Add(new JsonKeyClaimAction("role", null, "role"));
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
它成功重定向到 ADFS 登录窗口。登录后,它会正确调用 ExternalController.cs CallBack() 并且我确实有成功的身份验证。
public async Task<IActionResult> Callback()
{
// read external identity from the temporary cookie
var result = await HttpContext.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme);
if (result?.Succeeded != true)
{
throw new Exception("External authentication error");
}
我遇到的问题是我没有找回完整的用户。我看到索赔,但我没有看到角色。我习惯于看到一个包含角色列表的 JWT 令牌,但是,我在上面的结果中看不到这些角色。
如何从针对 ADFS 的身份验证中获取 JWT 令牌,或者返回角色并在结果中?
【问题讨论】:
标签: asp.net-core identityserver4 adfs asp.net-core-identity