【问题标题】:Should I send identity token to my api resources?我应该将身份令牌发送到我的 api 资源吗?
【发布时间】:2019-06-09 18:41:15
【问题描述】:

喏,

我正在使用 IdentityServer4,目标是保护资源 api 并在我的组织内公开身份服务器。

所以实际上我有这些元素:

  • 授权服务器
  • API 资源
  • 客户端(SPA 应用程序)

我想使用范围和用户角色访问的单个操作来保护我的 API。所以例如我有这个api:

- API 1 (Scope API 1)
    - Action1.1 <-- Only admin
    - Action1.2 <-- Only manager
    - Action1.3 <-- Only manager

- API 2 (Scope API 2)
    - Action2.1 <-- Admin and manager
    - Action2.2 <-- Only users
    - Action2.3 <-- Only users

我知道 OAuth2 协议用于授权(及其 access_token),而 OpenID Connect 丰富了支持身份验证的 OAuth2 协议(及其 identity_token)。

我会知道实现我的目标的最佳做法是什么。我找到了两个选择:

  1. 发送到API资源identity_token和authorization_token(这样我可以通过identity_token查看用户的角色并且可以访问范围)。
  2. 将角色添加到 access_token。

最佳做法是什么?欢迎任何建议

谢谢

【问题讨论】:

    标签: asp.net-core oauth-2.0 identityserver4 openid-connect


    【解决方案1】:

    在我看来,您不应该将 ID 令牌发送到您的资源。 ID 令牌仅适用于客户端应用程序。客户端解析令牌的内容并使用用户的信息。访问令牌的目的是通知 API 令牌的持有者已被授权访问 API 并根据令牌中的范围声明执行一组预定的操作。

    另一点是根据 OpenID Connect 规范,ID 令牌的受众(由 aud 声明指示)必须是发出身份验证请求的应用程序的客户端 ID。如果不是这种情况,则不应信任令牌。相反,API 期望具有 aud 值的令牌等于 API 的唯一标识符。所以在我看来,在访问令牌中包含权限声明会更好。

    【讨论】:

    • 嗨南宇,您知道将用户声明包含在身份服务器的访问令牌中的方法吗?谢谢
    • @ilMattion ,您可以点击herehere 获取代码示例。
    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2023-03-07
    • 2018-07-16
    • 2019-06-27
    • 2018-11-23
    • 2018-07-19
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多