[英]IdentityServer3 change subjectid/username during partial login
我们正在使用IdentityServer3实现我们自己的SSO提供程序。 除了要求用户首次登录时必须更改用户名,密码并提供其他信息外,我们几乎完成了所有工作。 问题在于用户名的更改:它还需要更改主题ID,因此,部分登录完成后,客户端还将收到新的用户名,而不是旧的用户名。
因此,我们需要的是部分登录方式来更改sub
声明。 在互联网上搜索此问题并没有给我任何有用的结果。 我已尝试更改声明,但是无法使它在发布请求之后仍然存在。 我已经完成以下工作:
var ctx = Request.GetOwinContext();
var authentication = await ctx.Authentication.AuthenticateAsync(Constants.PartialSignInAuthenticationType);
authentication.Identity.RemoveClaim(identityResult.Identity.FindFirst("sub"));
authentication.Identity.AddClaim(new Claim("sub", model.NewUsername));
不幸的是,这是行不通的,因为我在这里提出的声明只是副本。 改变主题的正确方法是什么?
我刚刚在IdentityServer3.Core.Extensions.OwinEnvironmentExtensions
类中查找时发现,该类是托管GetIdentityServerPartialLoginAsync()
方法的扩展类,与名为UpdatePartialLoginClaimsAsync()
的方法相同。 此方法接受一个可枚举的声明,所以我给了它新的sub
声明,但这引起了一些未知的错误(我不确定为什么),但是当我给它所有以前的声明时,用sub
声明替换了我想要的所有工作太。
var partialLogin = await OwinContext.Environment.GetIdentityServerPartialLoginAsync();
partialLogin.RemoveClaim(identityResult.Identity.FindFirst("sub"));
partialLogin.AddClaim(new Claim("sub", model.NewUsername));
await OwinContext.Environment.UpdatePartialLoginClaimsAsync(partialLogin.Claims);
上面的代码证明是我的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.