【问题标题】:Does app server use jwt id token for user identification or is the jwt id token meant to be sent to resource server to be able to identify the user?应用服务器是否使用 jwt id 令牌来识别用户,或者 jwt id 令牌是否旨在发送到资源服务器以识别用户?
【发布时间】:2022-02-06 22:42:02
【问题描述】:

Oauth 可用于身份验证、授权和委托。 Oauth 流程最终导致应用服务器收到访问令牌(和刷新令牌)和 jwt ID 令牌(openidconnect)。

应用服务器可以使用访问令牌将其传递给资源服务器,以代表用户(委托)访问资源。

应用服务器是否将Jwt id token传递给资源服务器,以告知资源服务器当前用户是谁?还是app server使用jwt id token对用户进行认证,让app server知道当前用户是谁?

【问题讨论】:

    标签: authentication oauth-2.0 oauth jwt openid-connect


    【解决方案1】:

    根据规范,应用服务器不应将 id_token 传递给其他任何东西。

    提供给资源服务器的数据应根据传递给授权服务器的范围确定,并包含在 access_token 中。

    您可以将 access_token 发送到资源服务器,然后资源服务器调用 userInfo 端点。

    请记住,这与最终用户授权谁接收什么数据有关。

    https://github.com/IdentityServer/IdentityServer3/issues/2015 对这些主题进行了相当长的讨论

    【讨论】:

    • 当用户向应用服务器端点发出后续请求时,应用服务器如何知道用户是谁?
    • 提供的主题(子)声明包含颁发者唯一值。那就是“iss”值和“sub”值组合将始终是唯一的。将这些协调给一个人是由应用程序/客户端决定的,并且会因发行人而异。我记得,Google 会为 Person 使用的不同设备显示不同的子值。并非所有发行人都为此功能提供直接的方法。
    【解决方案2】:

    ID 令牌仅证明用户已通过身份验证并提供用户的个人资料数据。它不包含任何可以证明用户确实确认资源服务器允许对其资源执行某些操作的信息(即没有 OAuth2 范围)。

    所以仅仅将 ID 令牌传递给资源服务器并不能帮助它做出授权决定。尽管资源服务器可以通过ID令牌来查明用户是什么,进而查明他有什么权限,但仍然不能证明用户确实确认委托应用服务器对其资源进行某些操作。 . (即我有权做某事并不意味着我同意你代表我做这件事。)

    所以总是将访问令牌传递给资源服务器以做出授权决定。

    你也可以参考这个blog post 也回答你的问题。

    【讨论】:

    • 假设没有资源服务器。我的 api 应用服务器可以使用从身份验证服务器接收到的 ID 令牌作为用户标识符吗?我试图了解 id 令牌可以在哪里被 api 应用程序服务器以及资源服务器使用(如果有的话)作为调用 api 应用程序服务器端点的这个用户是谁的 idneitfiet?
    • 理论上可以,因为这是ID令牌的目的,它应该包含一个用户标识符。
    • 我认为如果我将 azure b2c 或 firebase 之类的身份验证服务器集成到我的 api 应用服务器中会发生这种情况?
    猜你喜欢
    • 2018-07-24
    • 2016-04-06
    • 2017-05-06
    • 2021-07-21
    • 2020-07-27
    • 2016-08-04
    • 2014-12-02
    • 2019-08-15
    • 2020-12-14
    相关资源
    最近更新 更多