**已关闭。**此问题需要debugging details。它目前不接受回答。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答这个问题。
5年前关闭。
Improve this question的
我用的是IdentityServer4
我想添加其他自定义声明访问令牌,但我无法做到这一点。我修改了Quickstart5,并添加了ASP.NET Identity Core和Coemgen below建议的通过ProfileService的自定义声明。
你可以在这里下载我的代码:[zip package][3]。(它基于:Quickstart5和ASP.NET Identity Core,并通过ProfileService添加声明)。
问题:未执行GetProfileDataAsync。
4条答案
按热度按时间6l7fqoea1#
您应该实现自己的
ProfileService
。看看这篇文章,当我实现同样的事情时,我遵循了这篇文章:https://damienbod.com/2016/11/18/extending-identity-in-identityserver4-to-manage-users-in-asp-net-core/
下面是我自己实现的一个例子:
字符串
不要忘记在Startup.cs中配置服务(通过this answer)
型
nnt7mjpx2#
好了,这里的问题是:
虽然您已经正确配置了可用Identity资源(包括标准和自定义),但在调用API资源时,您还需要明确定义哪些是必需的。为了定义这个,你必须在
ExampleIdentityServer
项目中的Config.cs
类中,像在new ApiResouirce
构造函数中一样,提供第三个参数。只有这些才会包含在access_token
中字符串
本质上,这意味着我为我的组织配置了身份声明,但可能涉及多个API,并且并非所有API都使用所有可用的配置文件声明。这也意味着这些将存在于你的
ClaimsPrincipal
中,其余的仍然可以通过“userinfo”端点作为普通的http调用来访问。注意:关于刷新令牌:
如果您选择通过
AllowOfflineAccess = true
启用刷新令牌,则在刷新access_token“**GetProfileDataAsync does not executed!因此,access_token中的声明保持不变,尽管您获得了具有更新生命周期的新access_token。如果是这种情况,您可以通过在客户端配置上设置UpdateAccessTokenClaimsOnRefresh=true
来强制它们总是从Profile服务刷新。a7qyws3x3#
发现问题。
在startup.cs中,将
.AddProfileService<ProfileService>()
添加到services.AddIdentityServer()
,而不是添加services.AddTransient<IProfileService, ProfileService>();
。你最终会得到
字符串
感谢Coemgen的帮助!代码没有问题,只是启动错误。
v1uwarro4#
您可以通过在config类中的GetIdentityResources()中使用UserClaims选项来包含任何声明:
**UserClaims:**身份令牌应包含的关联用户声明类型列表。(根据官方文档)http://docs.identityserver.io/en/release/reference/identity_resource.html#refidentityresource