【发布时间】:2018-10-15 22:35:08
【问题描述】:
对不起我的英语。
我有三个项目:IdentityServer、Ensino.Mvc、Ensino.Api。 IdentityServer 项目从 IdentityServer4 库中提供主要的身份信息和声明 - 声明配置文件、声明地址、声明 Sid 等。 Ensino.Mvc 项目在令牌中获取此信息并将其发送到 API,以便 MVC 被授予对资源的访问权限。令牌包含 IdentityServer 提供的所有声明。但是在 API 中,我需要生成其他特定于 API 的声明,例如:与令牌中的声明 Sid 对应的声明 EnrollmentId。而且我想在 HttpContext 中添加这个声明以供将来使用。有人可以告诉我如何实现这一目标吗?
我在 Startup.ConfigureServices 中有这段代码:
// Add identity services
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5100";
options.RequireHttpsMetadata = false;
options.ApiName = "beehouse.scope.ensino-api";
});
// Add mvc services
services.AddMvc();
在其他项目中,没有 API,只有 mvc,我继承了 UserClaimsPrincipalFactory 并覆盖了 CreateAsync 以添加额外的声明。我喜欢在 API 项目中做这样的事情。有可能吗?
最好的方法是什么?
编辑:经过一番研究,我想做的是:通过 IdentityServer 进行身份验证,并根据声明和特定的 api 数据库数据在 api 中设置授权。
【问题讨论】:
-
在 API in 中生成声明是什么意思?声明是在 IdentityServer 上生成的,并且基于正在验证的用户/客户端。对我来说,您似乎需要一个 API 所需的范围,并且该范围应包含您的附加声明。我说的对吗?
-
@m3n7alsnak3,我想是的。我的 Ensino.Api 创建了一个“学校”,我应该用特定的 ID 给我的用户 SchoolPrincipal 打电话。 IdentityServer 只知道个人资料,不知道学校。因此,在 Ensino.Api 中,我必须将声明 SchoolPrincipal 添加到身份信息中。
-
我对你有基本相同的需求,通过扩展 IdentityServer4 API,比如创建一个新的端点,你可以通过从你的 API 发出一个 post 请求,在 IdentityServer 本身中做你需要的事情。为此,解决方案已启用:Custom endpoint for authorized clients on Identity Server 4 如需补充,请查看此链接:IdentityServer4 Adding more API Endpoints doc
标签: asp.net-mvc asp.net-core asp.net-identity identityserver4 claims-based-identity