identityserver4 - 在 identityserver4 和自定义 AuthorizationHandler User.Identity.isAuthenticated = false 上使用客户端凭据流
问题描述
嗨,我正在使用身份服务器 4,并且我创建了一个使用 client_credentials 保护的客户端
我可以使用 clientid 和 secret 检索令牌,根据 jwt.io,访问令牌的到期时间为 3600 秒或(1 小时)
在网络核心 2.2 api 我有一个自定义 AuthorizationHandler
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ClientCredentialRequirement requirement)
{
if (requirement.AllowedClients != null && requirement.AllowedClients.Any()) {
if (context.User.Identity.IsAuthenticated) { // this is false
context.Succeed(requirement);
return Task.CompletedTask;
}
使用客户端凭据时应该返回 false 吗?我期待它是真的,因为令牌是有效的
解决方案
所以我想通了。
事实证明,该应用程序是一个功能齐全的“idserver”加上已经配置了 cookie 身份验证的“mvc 网站”这一事实导致了我的问题。
对 api 的请求没有声明,因为不使用承载身份验证方案来处理请求。
我必须将它添加到 api 控制器才能按预期工作。
[Authorize(AuthenticationSchemes = "Bearer")]
public class MixedController : Controller
如此处详述
现在,即使使用客户端凭据,User.Identity 声明现在也填充了令牌中的声明和范围,并且用户显示为 Authenticated = true
推荐阅读
- javascript - How to wait on async .then
- spring-boot - 从 Spring Cloud Configuration 加载属性数组
- flutter - 由于 cloud_firestore,无法安装 permission_handler 和 file_picker
- r - plot.window(…) 中的错误:需要有限的“xlim”值,但看起来一切都很好
- python - 从 psycopg2 在 Postgres 中插入 dict 列表作为 json 数组
- python - 在 Heroku 中上传烧瓶应用程序并且工作正常但在我的终端中出现错误,(拉取函数中的错误)
- php - 从某个日期到 12 月计算月份,然后从次年 1 月到同年 12 月计算月份,然后从 1 月到结束日期
- git - 每当我们使用 dotnet 格式运行 git commit 时,如何格式化代码?
- javascript - 需要根据javascript中的特定要求修改数组
- rxjs - 如何在 Svelte 中使用 RXJs 主题之类的存储变量