4

我正在尝试将我的一个 API 应用程序移植到 dotnet core (v2),并且升级中最重要的部分可能是让我的身份验证正常工作。

为此,我将 Thinkteture 的 IdentityModel 包添加到我的项目中。

我的 API 的工作原理是它从调用者那里以不记名令牌的形式接收身份验证标头。然后我Introspect使用该令牌来验证它对于当前任务是否可接受,并继续执行主要逻辑。

但是,我似乎只是在代码的初始设置中遗漏了一些绝对基本的东西,因为我根本无法启动内省。

接下来,我有一些来自我的Startup.cs, 和一个控制器的片段。

启动.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;

    }

项目控制器.cs

    [HttpGet]
    public IEnumerable<string> Get()
    {
       return new string[] { "isAuthenticated", $"{User.Identity.IsAuthenticated}" };
    }

此端点 (GET api/items) 始终返回 false,并且我的 OIDC 服务器应用程序从不记录任何与其通信的尝试。在代码上设置了断点services.AddAuthentication(),所以我知道基本的设置已经就位。

我尝试过的其他一些事情:

  • 在方法上加个Authorize装饰(没想到这会起作用..它没有)
  • 使用Authority选项,并允许发现自省端点(我想也许我的 OIDC 服务器可能不支持发现,这导致了问题,但提供自省端点并没有任何区别)

我确信我错过了一些完全微不足道的东西,但是在花了几个小时戳、搜索和尝试各种东西之后,我意识到我一定只是忽略了它。

4

1 回答 1

2

即使这个答案来晚了,我想问一下您是否尝试过设置SkipTokensWithDotsfalse.

对我有用的是:

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;
    });
于 2018-09-06T09:16:07.133 回答