Thinktecture Identity Server:保护 Web API(授权最佳方法)

Thinktecture Identity Server: Securing Web APIs (Authorization Best Approach)

使用不记名令牌保护 API 时 authorization:Is 需要验证令牌是从我的身份服务器发出的还是已经在后台发生的,我该怎么做?

在不记名令牌方面,作用域扮演什么角色?

简而言之,是的,您需要验证不记名令牌是由您信任的发行人发行的。这意味着要么通过验证它是由受信任的发行人签署的,要么向您信任的发行人发出 API 电话,询问它是否确实是由您信任的发行人发行的。

实际上:在谈论 Katana 时,这是通过结合使用 [Authorize] filters/attributes 和 Owin 中间件来完成的:

选项 1

来自微软的中间件:

app.UseOAuthBearerAuthentication(opts)

https://msdn.microsoft.com/en-us/library/owin.oauthbearerauthenticationextensions.useoauthbearerauthentication(v=vs.113).aspx

https://www.nuget.org/packages/Microsoft.Owin.Security.OAuth

或者,可选地,来自 Brock Allen 和 Dominic Baier 的中间件:

选项 2

如果 Microsoft 的中间件(如果您需要它提供的额外功能),则使用以下构建于其之上的抽象:

app.UseIdentityServerBearerTokenAuthentication(opts)

来源:https://github.com/IdentityServer/IdentityServer3.AccessTokenValidation

NuGet:https://www.nuget.org/packages/IdentityServer3.AccessTokenValidation/

范围

当谈到范围和API 访问时,范围代表您要保护的资源。当客户端请求访问令牌时,它可以请求包含给定范围的令牌。然后,您的身份提供者会验证此客户端确实被允许接收具有此范围的令牌。如果成功,最终结果是一个令牌,允许客户端使用此令牌调用 API。

由于 API 信任此身份提供者(或令牌提供者)颁发的令牌,因此它所要做的就是

  1. 验证令牌是由 API 信任
  2. 的人颁发的
  3. 检查令牌是否包含代表其资源的范围