oauth2.0 我应该向我的API资源发送身份令牌吗?

gpnt7bae  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(105)

再见
我正在使用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查看用户的角色,并且可以访问作用域)。
1.正在向access_token添加角色。
什么是最佳实践?欢迎任何建议
谢谢

wa7juj8i

wa7juj8i1#

在我看来,你不应该把ID令牌发送到你的资源。ID令牌只用于客户端应用程序。客户端解析令牌的内容并使用用户的信息。访问令牌的目的是通知API,令牌的持有者已经被授权访问API,并根据令牌中的范围声明执行预定义的操作集。
另一点是根据OpenID Connect规范,ID令牌的受众(由aud声明指示)必须是发出身份验证请求的应用程序的客户端ID。如果不是这种情况,您不应该信任令牌。相反,API期望具有aud值的令牌等于API的唯一标识符。因此在我看来,在访问令牌中包括权限声明将是更好的意见。

相关问题