【发布时间】:2020-03-13 13:42:29
【问题描述】:
我有一个在身份服务器 4 (v3.1.2) 上开发的身份服务器和一个在 .NET Framework 4.6 上开发的 .NET Web API。在 Web API 中,我使用 Identity Server 3 访问令牌验证库 (v2.14.0) 来验证传入请求的令牌。
当我尝试使用由身份服务器生成的 JWT 令牌访问 .NET Web API 上的资源时,我总是收到未经授权的 401 响应。我在 .NET Web API 中设置了 Owin 中间件,如下所示。
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "http://localhost:9080/IdentityServer"
});
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
}
但是,为了确定这是否是身份服务器 4 令牌和身份服务器 3 访问令牌验证库之间的问题,我使用身份服务器 3 库 (v2.6.3) 创建了一个单独的身份服务器并提供了一个令牌从它生成到我之前使用的相同 Web API(与上面相同的 Startup.cs)。
此请求已成功授权,一切正常。
我的问题是:
是否可以使用来自身份服务器 4 的令牌来使用身份服务器 3 访问令牌验证库进行验证?还是我做错了什么?
【问题讨论】:
-
您是否收到任何错误消息?你也可以在 IDS4 服务器端 trace log 。
-
不,我没有收到任何错误。我也启用了身份服务器日志。但是一旦请求到达 web api,就没有任何反应。我注意到的一件事是,一旦我启动 web api(仅在启动时),登录 ID 服务器就会打印出提及发现端点和 jwks uri 的信息。除此之外什么都没有。
-
抱歉,尝试在 web api 端而不是 IDS 端跟踪日志。或者您可以使用 fiddler 来跟踪请求/响应,并检查任何内部错误消息是否包含 401 错误。
-
我在 Web API 中启用了 Owin 上下文的跟踪日志。发现有一个异常是由于受众不匹配而导致的。显然,身份服务器 3 访问令牌验证库将我的令牌的受众与它基于库中的颁发者创建的受众 (
/resources) 进行对比。从我的 IDS 4 生成的令牌具有与此不同的受众( /resources)。是否有可能让我自己设置观众而不是让图书馆设置? -
这可能是令牌标头更改的问题(显式类型 + 已删除
/resources受众)。看看this question + answer了解更多信息。
标签: c# .net asp.net-core identityserver4 identityserver3