Auth0 授权者拒绝来自服务的 JWT 令牌 - “jwt 颁发者无效。预期:https://myservice.auth0.com”

Posted

技术标签:

【中文标题】Auth0 授权者拒绝来自服务的 JWT 令牌 - “jwt 颁发者无效。预期:https://myservice.auth0.com”【英文标题】:Auth0 authorizor rejects JWT token from service - "jwt issuer invalid. expected: https://myservice.auth0.com" 【发布时间】:2018-08-30 19:05:59 【问题描述】:

我正在浏览将 auth0 设置为此处列出的 AWS 的 API 网关授权方的教程:https://auth0.com/docs/integrations/aws-api-gateway/custom-authorizers

我正在使用这里推荐的授权人:https://github.com/auth0-samples/jwt-rsa-aws-custom-authorizer

唯一的修改是配置文件。

但是,在测试授权函数时,我收到以下错误:

"name":"JsonWebTokenError","message":"jwt issuer invalid. expected: https://MYSERVICE.auth0.com"

MYSERVICE 是我设置的 auth0 api。这很令人困惑,因为我已经通过这种方法获得了 jwt 令牌:

curl --request POST \
--url https://MYSERVICE.auth0.com/oauth/token \
--header 'content-type: application/json' \
--data '"client_id":"MY_ID","client_secret":"MY_SECRET","audience":"TestApi","grant_type":"client_credentials"'

生成的令牌可以在https://jwt.io/ 处加载到调试器工具中,它会将iss 字段报告为https://MYSERVICE.auth0.com

是否存在可能导致此问题的错误配置?

【问题讨论】:

请您截取 jwt.io 声明的屏幕截图并附加到问题中。 仅供参考 - 最近经历了相同的步骤,这一切都“正常工作”。 附上@arcseldon 截图 好的,所以您的 JWT 确实在发行人末尾有“/”。 AWS API 网关中的自定义授权方呢? 【参考方案1】:

阅读您的问题后浏览了整个教程,这对我有用(最近已经这样做了)。

不清楚,但从您报告的有问题的错误消息来看,预期的发行人似乎没有尾随 /

但是,我的绝对没有。这是来自 JWT.IO 的一个正在工作的令牌的屏幕截图。

可以简单地发送 API(使用邮递员)并将其附加为 Authorization Bearer token 标头。使用教程的 api (AWS petshop),接收输出:

[
    
        "id": 1,
        "type": "dog",
        "price": 249.99
    ,
    
        "id": 2,
        "type": "cat",
        "price": 124.99
    ,
    
        "id": 3,
        "type": "fish",
        "price": 0.99
    
]

有助于查看您的 JWT 令牌 issaud(受众)值。

【讨论】:

@Arman - 很高兴听到你解决了它。它以前肯定咬过我……【参考方案2】:

晚了一点,但是当我设置自定义域并收到相同的错误时,这适用于我的 Blazor WASM ASP.Net Core 3.1 Web API 项目。

我的解决方法是在我的 Web 服务应用的 Startup.cs 类中设置 TokenValidationParameters.ValidIssuer = [MY_CUSTOM_DOMAIN]。

public void ConfigureServices(IServiceCollection services)

  services.AddAuthentication(options =>
  
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
  )
  .AddJwtBearer(options =>
  
    options.Authority = Configuration[“Auth0:Authority”];
    options.Audience = Configuration[“Auth0:ApiIdentifier”];
    options.TokenValidationParameters.ValidIssuer = Configuration[“Auth0:Issuer”];
  );

这是我的服务器的 appsettings.config:


  “AllowedHosts”: “*”,
  “Auth0”: 
    “Authority”: “[AUTH0_TENANT_DOMAIN]”, (i.e. https://prod-mydomain.us.auth0.com)
    “Issuer”: “[MY_CUSTOM_DOMAIN]”, (i.e. https://login.mycustomdomain.net/)
    “ApiIdentifier”: “[MY_API_DOMAIN]” (i.e. https://example.net/api)
  

重要! => 我必须在我的自定义域的 URL 中包含一个尾随的“/”,如下所示:https://login.mycustomdomain.net/"。您可以通过查看在调用您的 Web 服务期间传递的不记名令牌(@jwt.io 或 jwt.ms)中找到的 ISS 值来验证是否需要尾随“/”。

【讨论】:

以上是关于Auth0 授权者拒绝来自服务的 JWT 令牌 - “jwt 颁发者无效。预期:https://myservice.auth0.com”的主要内容,如果未能解决你的问题,请参考以下文章

Auth0 JWT 插件和 ionic2 - 无授权标头发送

未找到授权令牌 - Express-JWT 和 Auth0

如何让我的 Auth0 权限进入 AWS HTTP API Jwt 授权方的访问令牌的范围声明?

通过 Auth0 React 和 ASP.net 核心授权然后使用 JWT 令牌

Auth0“找不到服务”错误

PHP中的Auth0 JWT令牌验证