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

时间:2019-01-15 17:38:21

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

Ciao

我正在与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添加角色。

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

谢谢

1 个答案:

答案 0 :(得分:2)

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

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