Microsoft 身份平台上的 OAuth 实施使用范围来获得委派权限,使用角色来获得应用程序权限。我正在编写一个受保护的 Web API,它支持这两种类型的访问令牌。
对于范围验证,我可以使用[Authorize(Policy = "HasTheScope")]
以下策略定义应用于我的控制器操作:
options.AddPolicy("HasTheScope", policy => policy.RequireClaim("scp", "TheScope"));
对于角色验证,我可以应用[Authorize(Policy = "HasTheRole")]
以下策略定义:
options.AddPolicy("HasTheRole", policy => policy.RequireRole("TheRole"));
对于多个[Authorize]
属性,必须满足所有属性,因此不可能简单地将两个策略应用于操作。
允许对应用程序请求(使用客户端凭据流创建的令牌)和代表用户的请求(使用授权代码流创建的令牌)访问我的控制器操作的最佳实践方法是什么?