我应该将身份令牌发送到我的 api 资源吗?

问题描述 投票:0回答:1

我正在使用 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个回答
3
投票

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

另一点是根据 OpenID Connect 规范,ID 令牌的受众(由

aud
声明表示)必须是发出身份验证请求的应用程序的客户端 ID。如果不是这种情况,您不应信任该令牌。相反,API 期望具有
aud
值的令牌等于 API 的唯一标识符。因此,在我看来,在访问令牌中包含权限声明将是更好的意见。

© www.soinside.com 2019 - 2024. All rights reserved.