【发布时间】:2018-01-25 01:30:12
【问题描述】:
给定
我有一个身份服务器 v4 正在运行。 Javascript 客户端创建令牌并使用生成的 accesstoken 访问 asp.core api。
在 Asp Core Api 中,我有这段代码可以工作
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = authority;
options.ApiName = "myApi";
});
在 IdentityServer 中,我将“myApi”定义为 ApiResource。
问题
现在我想包含另一个 api,它是较旧的 webapi,用 .net4.6.1 编写。但是对这个 api 的所有调用都以 401
结尾对具有相同令牌的核心 api 使用相同的请求。
代码如下:
JwtSecurityTokenHandler.InboundClaimTypeMap.Clear();
var options = new IdentityServerBearerTokenAuthenticationOptions
{
Authority = identServer,
RequiredScopes = new List<string>
{
"myApi"
}
};
app.UseIdentityServerBearerTokenAuthentication(options);
但是,在核心项目中运行的令牌在那里不起作用。 我可以看到的一件事是我无法在 IdentityServerBearerTokenAuthenticationOptions 中设置 api 名称。
目前我正在使用 IdentityServer3.AccessTokenValidation Nuget 包。也许这与问题有关?
由于存在一些依赖问题,我无法使用 IdentityServer4.AccessTokenValidation。 例如,netcore 身份验证构建器只有 AddOptions
通过 jwt.io,我还检查了令牌,可以看到 myApi 是 aud 和 scope 的一部分
我也尝试设置不需要的范围,但我得到了 401
前段时间我用身份服务器 v3 测试了它,它在那里工作。
我在日志中也看不到任何验证错误。为了记录 api 令牌验证的错误,我缺少什么?
我错过了什么?
更新 将验证模式设置为端点时,我在身份服务器中遇到了异常。
失败:IdentityServer4.Validation.ApiSecretValidator[0] 未找到具有该名称的 API 资源。中止失败:IdentityServer4.Endpoints.IntrospectionEndpoint[0] API 未经授权调用自省端点。中止。
不幸的是,它并没有告诉我他所期望的 api 是什么...... 如前所述,“myApi”被定义为ApiResource,但是如何在非核心环境中设置api名称?
【问题讨论】:
-
“但在核心项目中运行的令牌在那里不起作用。”那么你得到了什么?
-
抱歉忘记写了。我得到一个 401
标签: asp.net asp.net-web-api identityserver4 identityserver3