- OpenID 和 OAuth 的区别
- IdentityServer4,NET Core下的安全框架
- 客户端模式(Client Credentials)
- 密码模式(resource owner password credentials)
- 简化模式(implicit flow)
- 授权码模式(Authorization code flow)
- 混合模式(Hybrid Flow)
<span id="OpenIDvsOAuth"></span>
OpenID 和 OAuth 的区别
- OpenID:Authentication,即认证,用户是谁?
- OAuth:Authorization,即授权,用户能做哪些操作?
- OpenID Connect(OIDC):基于OAuth协议,是“认证”和“授权”的结合。
OAuth2提供了Access Token来解决授权第三方客户端访问受保护资源的问题。 OIDC在这个基础上提供了ID Token来解决第三方客户端标识用户身份认证的问题。。
<span id="identityServer4"></span>
IdentityServer4
IdentityServer4 是 ASP.NET Core的一个包含OpenID Connect和OAuth 2.0协议的框架,提供了单点登录,集中控制,API访问控制等功能。
<span id="client"></span>
客户端模式(Client Credentials)
适用于和用户无关,机器与机器之间直接交互访问资源的场景。
POST https://api.oauth2server.com/token
grant_type=client_credentials&
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET
<span id="password"></span>
密码模式(resource owner password credentials)
适用于当前的APP是专门为服务端设计的情况。
POST https://api.oauth2server.com/token
grant_type=password&
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
<span id="implicit"></span>
简化模式(implicit flow)
适用于浏览器WEB应用,支持
- 用户认证(JavaScript 应用或传统服务端渲染的Web应用)
- 用户认证+授权(JavaScript应用)
简化模式下ID Token和Access Token都是通过浏览器的前端通道传递的。
所以如果是传统服务端Web应用并且仅是在服务端使用Access Token的话,推荐使用Hybrid Flow。
<span id="code"></span>
授权码模式(Authorization code flow)
授权码模式通过后台传输Tokens,相对于简化模式会更安全一点。
但每当考虑使用授权码模式的时候,请使用混合模式。混合模式会首先返回一个可验证的ID Token并且有更多其他特性。
<span id="hybrid"></span>
混合模式(Hybrid flow)
适用于服务器端 Web 应用程序和原生桌面/移动应用程序。
混合模式是简化模式和授权码模式的组合。混合模式下ID Token通过浏览器的前端通道传递,而Access Token和Refresh Token通过后端通道取得。
参考
- 认证与授权——单点登录协议盘点:OpenID vs OAuth2 vs SAML
- IdentityServer4 实现 OpenID Connect 和 OAuth 2.0
- blackheart-OIDC
- Which OpenID Connect/OAuth 2.0 Flow is the right One?
来源:oschina
链接:https://my.oschina.net/u/4278385/blog/3922275