Jwt Auth0中自定义API的优点是什么?

Jwt Auth0中自定义API的优点是什么?,jwt,single-page-application,auth0,ktor,Jwt,Single Page Application,Auth0,Ktor,问题 我在理解auth0的一些基本内容时遇到了问题,也许有人可以帮我解决 在本教程中,TDLR的第一行是: 必须在Auth0仪表板中配置SPA和API 我不明白为什么我需要在Auth0上配置API。我的代码似乎正常工作,所以有人能帮助我了解我是否做错了什么,或者如果我在仪表板中添加了自定义API,有什么好处吗 设置 水疗(反应) Auth0 REST API(ktor) 我所做的 在Auth0上创建了SPA 通过Auth0登录我的SPA以获得JWT(谷歌令牌) 在调用RESTAPI时将JW

问题

我在理解auth0的一些基本内容时遇到了问题,也许有人可以帮我解决

在本教程中,TDLR的第一行是:

必须在Auth0仪表板中配置SPA和API

我不明白为什么我需要在Auth0上配置API。我的代码似乎正常工作,所以有人能帮助我了解我是否做错了什么,或者如果我在仪表板中添加了自定义API,有什么好处吗

设置

  • 水疗(反应)
  • Auth0
  • REST API(ktor)
我所做的

  • 在Auth0上创建了SPA
  • 通过Auth0登录我的SPA以获得JWT(谷歌令牌)
  • 在调用RESTAPI时将JWT作为身份验证承载发送
  • RESTAPI使用auth0URL
    mydomain.eu.Auth0.com/.well-known/jwks.json
    与JWK提供程序验证JWT令牌
  • 身份验证似乎有效

好问题,我假设您的身份验证请求包含代表您的自定义API(Rest API)的访问群体参数。在oauth2术语中,它被称为资源服务器。每个资源服务器都可以拥有许多权限,您可以在启动身份验证请求时将这些权限包括在作用域中。让我们退一步,谈谈令牌格式。Auth0以两种格式发布令牌:

  • 不透明字符串:不使用自定义API时
  • JSON Web令牌(JWT):使用自定义API时

如上链接所述,令牌格式取决于访问群体(自定义API)参数。因此,当身份验证请求包括访问群体时,auth0将向JWT令牌颁发所有必要的权限。然后,在将资源返回到前端客户机之前,需要验证API服务器中的JWT令牌


您需要在auth0中创建自定义API并定义权限的原因应该是有道理的。如果您没有在auth0中创建自定义API,则无法知道您在令牌中需要哪种权限来生成错误(指定的访问群体无效)

很好的问题,我假设您的身份验证请求包括表示您的自定义API(Rest API)的访问群体参数。在oauth2术语中,它被称为资源服务器。每个资源服务器都可以拥有许多权限,您可以在启动身份验证请求时将这些权限包括在作用域中。让我们退一步,谈谈令牌格式。Auth0以两种格式发布令牌:

  • 不透明字符串:不使用自定义API时
  • JSON Web令牌(JWT):使用自定义API时

如上链接所述,令牌格式取决于访问群体(自定义API)参数。因此,当身份验证请求包括访问群体时,auth0将向JWT令牌颁发所有必要的权限。然后,在将资源返回到前端客户机之前,需要验证API服务器中的JWT令牌


您需要在auth0中创建自定义API并定义权限的原因应该是有道理的。如果您不在auth0中创建自定义API,则无法知道您在令牌中需要什么类型的权限,这将在执行我的WebAuth对象时生成错误(指定的访问群体无效)

我添加了一个“访问群体”密钥,值为mydomain/userinfo。范围是“openid电子邮件配置文件”。我收到一个访问令牌和id令牌,通过访问令牌我可以获得用户配置文件。因此,我仍然无法理解,如果我添加一个自定义api,我会做什么。您的链接提到此访问令牌采用不透明格式。当我配置自定义api时,我会将api标识符添加为访问群体并接收JWT格式的令牌,对吗?我会用它将它发送到我的RESTAPI并在那里检查它吗?但是我不明白为什么这样更好。如果你提供openid作为作用域,它应该自动添加/userinfo作为受众。或者,您可以作为受众提供/userinfo。在该阶段,访问令牌不是JWT令牌。它是一个不透明的令牌,只能用于调用/userinfo端点。您不能使用此访问令牌调用Rest API端点。现在,将自定义API标识符作为访问群体传递,并比较令牌。您可以使用来解码令牌并检查令牌内容。我在没有访问群体的情况下进行了授权,并将令牌与api标识符为访问群体的授权进行了比较。我看到访问令牌更长,并且具有我通过auth0中的用户角色添加的权限。我仍然不明白我将如何在我的应用程序中使用它。最后,我可以在RESTAPI后端验证jwt,并检查用户是否具有访问路由的正确角色。感谢您的帮助,我将尝试重新阅读文档…简单地说,角色或权限可用于保护您的API端点并防止未经授权的请求。示例:让我总结一下:我使用自定义api的授权来获取用户的范围/权限。之后,我知道作为令牌的一部分,我可以访问哪些作用域。现在,我用这个令牌调用我的RESTAPI,并通过检查用户是否具有该路由的权限/范围来保护每个路由?像“获取帖子”这样的路线可能需要“阅读:帖子”。但这几乎与我只向每个用户添加一个角色相同,并在后端比较用户是否可以基于其角色访问特定路由-正确吗?:)当我创建WebAuth对象时,我添加了一个“访问者”密钥,其中mydomain/userinfo为值。范围是“openid电子邮件配置文件”。我收到一个访问令牌和id令牌,通过访问令牌我可以获得用户配置文件。因此,我仍然无法理解,如果我添加一个自定义api,我会做什么。您的链接提到此访问令牌采用不透明格式。在配置自定义api时,我会将api标识符添加为acquisition和recei