首页 > 解决方案 > 在 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 吗?我期待它是真的,因为令牌是有效的

标签: identityserver4

解决方案


所以我想通了。

事实证明,该应用程序是一个功能齐全的“idserver”加上已经配置了 cookie 身份验证的“mvc 网站”这一事实导致了我的问题。

对 api 的请求没有声明,因为不使用承载身份验证方案来处理请求。

我必须将它添加到 api 控制器才能按预期工作。

[Authorize(AuthenticationSchemes = "Bearer")]
public class MixedController : Controller

如此处详述

现在,即使使用客户端凭据,User.Identity 声明现在也填充了令牌中的声明和范围,并且用户显示为 Authenticated = true


推荐阅读