标签:c owin saml-2-0 kentor-authservices
我正在评估Kentor auth services(它的OWIN版本)以使用SAML对用户进行身份验证.现在我想对该服务另外提出索赔.与那里的样本一起,我能够将请求发送到服务并进行调试.
我做了一个自定义声明的身份验证管理器,在那里我可以看到另外的声明到达auth服务.但是后来(在肯德尔的例子中有一个查看主页/索引列出所有索赔)这个声明不再可用.有谁知道我做错了什么?
非常感谢!
解决方法:
将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.仅使用当前会话的传入声明.
将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,owin,saml-2-0,kentor-authservices 来源: https://codeday.me/bug/20190609/1206787.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。