Authentication 为什么不应该';我不能在IDP上下文中将IdToken用作承载令牌吗?

Authentication 为什么不应该';我不能在IDP上下文中将IdToken用作承载令牌吗?,authentication,jwt,amazon-cognito,openid-connect,auth0,Authentication,Jwt,Amazon Cognito,Openid Connect,Auth0,我正在使用一个IDP平台(这里是AWS Cognito,但可能是Auth0、OKTA或KeyClope),我想知道为什么不鼓励我使用ID令牌作为授权令牌 更具体地说,我将不使用从用户授权到第三方应用的资源服务器。我的IDP只允许我在不同的应用程序上对所有用户进行SSO。这里没有授予的范围,只有每个服务将用于授予或拒绝访问资源(如电子邮件、用户ID或角色)的身份验证声明 我知道我可以为我的应用程序提供id令牌,然后为我的用户创建一些会话。既然可以在每个应用程序的后端检查其签名,那么为什么我不应该将

我正在使用一个IDP平台(这里是AWS Cognito,但可能是Auth0、OKTA或KeyClope),我想知道为什么不鼓励我使用
ID令牌作为授权令牌

更具体地说,我将不使用从用户授权到第三方应用的资源服务器。我的IDP只允许我在不同的应用程序上对所有用户进行SSO。这里没有授予的范围,只有每个服务将用于授予或拒绝访问资源(如电子邮件、用户ID或角色)的身份验证声明

我知道我可以为我的应用程序提供
id令牌
,然后为我的用户创建一些会话。既然可以在每个应用程序的后端检查其签名,那么为什么我不应该将
id令牌本身作为无状态会话令牌使用呢

如果我应该在
id令牌上使用
访问令牌
,我可以用角色替换作用域吗?或者,我应该如何理解非委托上下文中的作用域(“用户自己使用应用程序,不授予权限”vs“用户将所有作用域授予SPA前端,而SPA前端本身就是一个应用程序”)


顺便说一下,我正在通过前端的代码PKCE流恢复令牌。

ID令牌只包含有关用户以及用户如何进行身份验证的详细信息。因此,它非常适合与用户创建持久的cookie会话。和ID令牌的默认生存期也非常短,如分钟。您通常在建立sesson后丢弃id令牌。永远不要将ID令牌传递给其他服务

访问令牌的意思是让您可以访问该令牌用于的API

当用户登录时,您请求访问某些作用域以及用户选择(同意)的作用域,然后将其包含在访问令牌中(如作用域和访问群体声明)

理论上,您可以将ID令牌传递给API,而不是它应该如何工作。
有关更多详细信息,请参见和:

好的。但是现在如果我使用id令牌作为无状态sesison令牌,持续几分钟(访问令牌不再持续)并定期调用刷新令牌就可以了。在这种情况下,请记住,我没有向任何第三方服务发送id令牌,而是使用它从前端到后端进行自动验证。听起来太糟糕了吗?如果是这样,为什么?好的,我知道第一个链接,即使:
不要使用ID令牌来访问API。。。身份证的观众。。。必须是发出身份验证请求的应用程序的客户端ID。如果不是这样,您就不应该信任令牌。
而且我确实正在向请求使用正确id的客户端发送id令牌。因此,我不明白为什么要阻止它。但如果是这样的话,你将如何让应用程序通过在用户上定义的角色来管理授权?ID令牌可以包含个人信息,如姓名、地址、电子邮件。。(比如驾照/护照),但你不想把它交给第三方和API,相反,就像在酒店一样,你会得到一个用于访问资源的密钥。你不使用你的身份访问物品……除非服务使用身份本身授予授权,比如当你去邮局用身份证取回包裹时。让他们授权你。就我而言,我的API是第一方。我的客户应该获得完全访问权限,API将根据用户id和角色管理授权。事实上,我认为他们可以使用访问令牌——但不能使用AWS Cognito,这可能是我困惑的根源——因为他们不完全遵循标准,不鼓励使用Id令牌作为授权方法。