C#中的OAuth和OpenID

OAuth是什么?

OAuth(Open Authorization,即开放授权)是一个用于代理授权的标准协议。它允许应用程序在不提供用户密码的情况下访问该用户的数据。现在通常指的OAuth 2.0。

OAuth 2.0术语

  • 资源所有者(Resource Owner):拥有客户端应用程序想要访问的数据的用户。.

  • 客户端(Client):想要访问用户数据的的应用程序

  • 授权服务端(Authorization Server):通过用户许可,授权客户端访问用户数据的授权服务端。

  • 资源服务端(Resource Server):存储客户端要访问的数据的系统。在某些情况下,资源服务端和授权服务端是同一个服务端。

  • 访问令牌:访问令牌是客户端可用于访问资源服务端上用户授权的数据的唯一密钥。

OAuth 2.0的抽象流程图 

C#中的OAuth和OpenID

认证和授权

OAuth2.0 用于授权
OpenID Connect 用于认证

认证(Authentication) 是确保通信实体是其所声称的实体。
授权(Authorization) 是验证通信实体是否有权访问资源的过程。

OpenID Connect

OpenID Connect 是在 OAuth2.0 协议之上的标识层。它拓展了 OAuth2.0,使得认证方式标准化。

OAuth不会立即提供用户身份,而是会提供用于授权的访问令牌。OpenID Connect使客户端能够通过认证来识别用户,其中,认证在授权服务端执行。它是这样实现的:在向授权服务端发起用户登录和授权告知的请求时,定义一个名叫openid的授权范围。在告知授权服务器需要使用 OpenID Connect 时,openid是必须存在的范围。

JWT

ID 令牌就是 JWT(JSON Web Token)。JWT 是一个编码令牌,JWT 这种结构化体可以分为 HEADER(头部)、PAYLOAD(数据体)和 SIGNATURE(签名)三部分。经过签名之后的 JWT 的整体结构,是被句点符号分割的三段内容,结构为 header.payload.signature。在获得了 ID 令牌后,客户端可以将其解码,并且得到被编码在有效负载中的用户信息。

Claim(声明)

  • iss:令牌发布者

  • sub:用户的唯一标识符

  • email:用户的邮箱

  • iat:用 Unix 时间表示的令牌发布时间

  • exp:Unix 时间表示的令牌到期时间