我尝试在oAuth 2.0中同时使用两种授权类型。因为我需要设置一些API方法,需要使用客户端凭据,因为这些凭据用于服务到服务连接,而对于其他一些方法,我需要设置授权授权类型,因为它用作用户到服务连接。我的oAuth令牌提供程序是Azure身份服务,API是在.NET Core中构建的
ncecgwcz1#
这可以通过创建两个不同的客户端来实现。在这两种情况下,客户端都将根据其流程管理身份验证,然后获取用于调用API的访问令牌。API所有者还应设计客户端请求的作用域。API的第一项工作应该是在每个请求上验证JWT访问令牌。您可以使用Microsoft中间件来完成此任务:
private void ConfigureOAuth(IServiceCollection services) { services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = this.configuration.MetadataEndpoint; options.TokenValidationParameters = new TokenValidationParameters { ValidIssuer = "myissuer", ValidAudience = "myaudience" }; }); }
你的API控制器会收到一个ClaimsPrincipal,你可以使用authorization policies来实现授权,以检查你是否有正确的作用域和当前操作的声明:
ClaimsPrincipal
[HttpGet("{id}/transactions")] [Authorize(Policy = "mypolicy")] public async Task<Transactions> GetTransactionsAsync(string id) { // Implementation goes here }
1条答案
按热度按时间ncecgwcz1#
这可以通过创建两个不同的客户端来实现。在这两种情况下,客户端都将根据其流程管理身份验证,然后获取用于调用API的访问令牌。API所有者还应设计客户端请求的作用域。
API的第一项工作应该是在每个请求上验证JWT访问令牌。您可以使用Microsoft中间件来完成此任务:
你的API控制器会收到一个
ClaimsPrincipal
,你可以使用authorization policies来实现授权,以检查你是否有正确的作用域和当前操作的声明: