Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问令牌验证在.net core 2.2中不起作用_C#_.net_Angular_Asp.net Core 2.0_Okta - Fatal编程技术网

C# 访问令牌验证在.net core 2.2中不起作用

C# 访问令牌验证在.net core 2.2中不起作用,c#,.net,angular,asp.net-core-2.0,okta,C#,.net,Angular,Asp.net Core 2.0,Okta,我正在构建一个POC,tech stack作为前端+点网核心作为后端,Okta作为身份验证和授权提供商 我能够在angular前端应用程序中使用Okta NPM包对用户进行身份验证 现在我收到两个令牌,一个是访问令牌,另一个是Id令牌 现在我想用访问令牌保护我的.net核心API,因此对于每个请求,我都将访问令牌发送到服务器 我在我的启动文件中添加了以下代码,并添加了Okta.AspNetCoreNuGet包 services.AddAuthentication(options =

我正在构建一个POC,tech stack作为前端+点网核心作为后端,Okta作为身份验证和授权提供商

我能够在angular前端应用程序中使用Okta NPM包对用户进行身份验证

现在我收到两个令牌,一个是访问令牌,另一个是Id令牌

现在我想用访问令牌保护我的.net核心API,因此对于每个请求,我都将访问令牌发送到服务器

我在我的启动文件中添加了以下代码,并添加了Okta.AspNetCoreNuGet包

       services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme =     OktaDefaults.ApiAuthenticationScheme;
            options.DefaultChallengeScheme = OktaDefaults.ApiAuthenticationScheme;
            options.DefaultSignInScheme = OktaDefaults.ApiAuthenticationScheme;
        })
            .AddOktaWebApi(new OktaWebApiOptions()
            {
                OktaDomain = "https://dev-819187.okta.com",
                Audience = "api://default",
            });
这是行不通的

然后我添加了这个代码

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = OktaDefaults.ApiAuthenticationScheme;
                options.DefaultChallengeScheme = OktaDefaults.ApiAuthenticationScheme;
                options.DefaultSignInScheme = OktaDefaults.ApiAuthenticationScheme;
            })
                .AddOktaWebApi(new OktaWebApiOptions()
                {
                    OktaDomain = "https://dev-819187.okta.com",
                    Audience = "{App clientId}",
                    AuthorizationServerId = null,
                });
通过它,我可以验证Id令牌,但当我将访问令牌发送到.net core时,相同的代码不起作用

然后我检查了这些url:

  • 返回两个不同的jwks\u uri,即:

  • ->openid
  • ->oauth
  • 并检查两个URL中的kid

    openId密钥(3)返回的kid与我的Id令牌中的kid匹配,当我使用在线URL(如)对其进行解码时

    但是,当我解码访问令牌时,访问令牌中的kid与Oauth密钥(4)或开放Id密钥(3)url中提供的kid不匹配

    这很奇怪,我在调查这件事上浪费了很多时间,但毫无乐趣


    悲哀的是,当我尝试使用邮递员/introspect url手动验证令牌时,这两个令牌都会返回成功。使用JwtBearer扩展名:IssuerSigningKey=signingKey如何??这里的签名密钥是什么?孩子,如果不是从哪里我可以得到它?你能解决它吗?我在使用AWS Cognito令牌时遇到了同样的问题。我们可以通过IDtoken进行验证,但不能通过AccessToken进行验证是的,我将在此处进行更新。您需要仔细地重新检查所有配置