我正在将我的一个API应用程序移植到dotnet core(v2),可能这个升级中最重要的部分是让我的身份验证工作。
为此,我已将Thinkteture的IdentityModel软件包添加到我的项目中。
我的API工作原理是它从来电者那里以持有人令牌的形式接收到身份验证标头。然后我Introspect
该令牌验证它是否可以接受当前任务,并继续使用主逻辑。
但是,我似乎只是在代码的初始设置中遗漏了一些绝对基本的东西,因为我根本无法进行内省。
以下,我有一些来自Startup.cs
和控制器的片段。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthentication(OAuth2IntrospectionDefaults.AuthenticationScheme)
.AddOAuth2Introspection(options =>
{
options.IntrospectionEndpoint = "#REDACTED#";
options.ClientId = "#REDACTED#";
options.ClientSecret = "#REDACTED#";
});
var x = 1;
}
ItemsController.cs
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "isAuthenticated", $"{User.Identity.IsAuthenticated}" };
}
此端点(GET api / items)始终返回false,我的OIDC服务器应用程序从不记录任何与之通信的尝试。 services.AddAuthentication()
代码上设置的断点捕获,因此我知道基本的设置部分已到位。
我尝试过的其他一些事情:
Authorize
装饰(并没有真正期望这种方法起作用......而且它没有&#39;)Authority
选项,并允许发现内省端点(我想也许我的OIDC服务器可能不支持发现,这导致了问题,但提供了内省终点没有任何区别)我确定我错过了一些完全无足轻重的事情,但是经过几个小时的探索,搜索和尝试各种各样的事情后,我才意识到我必须忽视它。
答案 0 :(得分:2)
即使这个答案来得太晚,我也想问您是否尝试将SkipTokensWithDots
设置为false
。
对我有用的是:
services.AddAuthentication(OAuth2IntrospectionDefaults.AuthenticationScheme)
.AddOAuth2Introspection(options =>
{
options.IntrospectionEndpoint = "#REDACTED#";
options.ClientId = "#REDACTED#";
options.ClientSecret = "#REDACTED#";
// We are using introspection for JWTs so we need to override the default
options.SkipTokensWithDots = false;
});