繁体   English   中英

IdentityServer3在部分登录期间更改主题/用户名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM