gpt4 book ai didi

c# - Kentor Auth 服务 - 附加声明

转载 作者:太空狗 更新时间:2023-10-30 01:03:40 25 4
gpt4 key购买 nike

我正在评估 Kentor auth services (它的 OWIN 版本)使用 SAML 对用户进行身份验证。现在我想向该服务传递额外的声明。结合那里的示例,我能够将请求发送到服务并对其进行调试。

我做了一个自定义的 claimsAuthenticationManager,在那里我可以看到额外的声明到达了 auth 服务。但后来(在 Kendor 示例中,有一个 View home/index 列出了所有声明)此声明不再可用。有谁知道我做错了什么?

非常感谢!

最佳答案

将 AuthServices(或任何外部登录)与 ASP.NET Identity 一起使用时,传入的声明仅用于在数据库中查找 ASP.NET Identity 用户。然后完全丢弃传入的用户,并加载和使用来自 ASP.NET Identity 的用户

在默认的 MVC5 模板中,从外部身份到 ASP.NET 身份的切换是在 AccountController.ExternalLoginCallback() 中完成的。要保留传入的信息,您必须调整此方法。有两种选择。

1。在 ExternalLoginCallback()

中更新存储的用户
// Sign in the user with this external login provider if the user already has a login
var user = await UserManager.FindAsync(loginInfo.Login);
if (user != null)
{
// Update user with info from external identity and save.
user.GivenName = loginInfo.ExternalIdentity.FindFirst(ClaimTypes.GivenName).Value;
await UserManager.UpdateAsync(user);

await SignInAsync(user, isPersistent: false);
return RedirectToLocal(returnUrl);
}

2。仅对当前 session 使用传入声明。

SignInAsync() 的内容复制到您的 ExternalLoginCallback() 方法。将对 user.GenerateUserIdentityAsync() 的调用提取到单独的行中,然后。在调用之前添加声明SignInAsync()`

// Sign in the user with this external login provider if the user already has a login
var user = await UserManager.FindAsync(loginInfo.Login);
if (user != null)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await user.GenerateUserIdentityAsync(UserManager);
identity.AddClaim(loginInfo.ExternalIdentity.FindFirst(ClaimTypes.GivenName));
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent },
identity);

return RedirectToLocal(returnUrl);
}

建议

也可以use external login without ASP.NET Identity .如果您只使用来自 Idp 的身份而不使用其他登录方法,则可能更容易使用。

关于c# - Kentor Auth 服务 - 附加声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27036323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com