从IdentityServer网站内遗漏索赔,包括所有样本

问题描述 投票:0回答:1

我确信这归结为缺乏理解。

我试图在IdentityServer实例中访问当前登录的用户声明。我发现我向用户提供的任何声明仅适用于安装客户端,而不适用于IdentityServer本身。

使用IdentityServer4团队提供的任何快速入门示例(QuickStart Samples)可以复制我的问题

我正在构建一个使用IdentityServer4提供身份验证的站点,还提供一些界面屏幕来管理您自己的配置文件。为此,我需要访问IdentityServer站点内的声明。

如果我们在快速启动时查看测试用户,我们有这样的用户:

            new TestUser
            {
                SubjectId = "1",
                Username = "alice",
                Password = "password",

                Claims = new List<Claim>
                {
                    new Claim("name", "Alice"),
                    new Claim("website", "https://alice.com")
                }
            },

我们可以看到它有2个索赔;名称和网站。

在登录控制器中,我还在登录之前添加了另一个声明(通过实验)

user.Claims.Add(new Claim(“given_name”,“bob”)); //使用主题ID和用户名发出身份验证cookie等待HttpContext.SignInAsync(user.SubjectId,user.Username,props);

当QuickStart站点和MVC客户端运行时,我可以成功登录。然后,Secure页面向我显示下面的声明(在启用AlwaysIncludeUserClaimsInIdToken之后)

enter image description here

但是,如果我访问IdentityServer4快速入门的Grants部分,并检查当前的User,我会看到一组完全不同的声明,如下所示:

enter image description here

如何在IdentityServer4快速入门中访问ID令牌中返回的相同声明列表?

我的具体原因是我将存储Active Directory UPM作为其中一个声明,并且当用户位于我们的Identity Server中的任何安全页面内时,将需要访问此声明。

asp.net-core identityserver4
1个回答
2
投票

好的 - 经过一天的游戏,我意识到HttpContext.SignInAsync()方法还有其他优先权。

之前,我有这个 - 按照教程

await HttpContext.SignInAsync(user.SubjectId, user.Username, props);

将此更改为

await HttpContext.SignInAsync(user.SubjectId, user.Username, props, user.Claims.ToArray());

给我正是我想要的东西。

离开这里,其他人也有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.