IdentityServer3在部分登录期间更改subjectid / username

时间:2016-11-14 13:39:38

标签: c# asp.net .net identityserver3

我们正在使用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));

遗憾的是,这不起作用,因为我在这里的说法只是副本。改变主题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我刚刚查看IdentityServer3.Core.Extensions.OwinEnvironmentExtensions类时发现了一个托管GetIdentityServerPartialLoginAsync()方法的扩展类,它有一个名为UpdatePartialLoginClaimsAsync()的方法。这个方法接受了一系列可用的声明,所以我给了它新的sub声明,但这会导致一些未知的错误(我不知道为什么),但是当我用{{1}给出所有先前的声明时声明取代了所有可行的工作。

sub

上面的代码证明是我的解决方案。