再见
我正在使用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添加角色。
什么是最佳实践?欢迎任何建议
谢谢
1条答案
按热度按时间wa7juj8i1#
在我看来,你不应该把ID令牌发送到你的资源。ID令牌只用于客户端应用程序。客户端解析令牌的内容并使用用户的信息。访问令牌的目的是通知API,令牌的持有者已经被授权访问API,并根据令牌中的范围声明执行预定义的操作集。
另一点是根据OpenID Connect规范,ID令牌的受众(由
aud
声明指示)必须是发出身份验证请求的应用程序的客户端ID。如果不是这种情况,您不应该信任令牌。相反,API期望具有aud
值的令牌等于API的唯一标识符。因此在我看来,在访问令牌中包括权限声明将是更好的意见。