一 Oauth2这个是为了方便安全的用户(第三方)登录用的。
一开始听见oauth2这个词肯定是很懵的。这是啥,鉴权用的?认证用的?授权用的?跟shiro(java)是一个东西吗?
其实oauth就是一个流程。我们根据这个流程的要求写代码、
oauth有一个授权服务器。是作为用户的认证用的。对于服务端来说只需实现一个oauth的授权服务器。对于用户来说(调用授权认证的研发)只需根据流程发请求就可以了。
二 Oauth 有四种实体。 下面以用QQ登陆微博为例。
资源所有者(resource owner) 我们(普通用户)
资源服务器(resource server) QQ的后台服务器(获取账号,昵称,头像等)。
应用程序(client) 微博这个平台
授权服务器(Authorization Server) 认证QQ & 授权用的。
三 oauth有四种方式。 目的是不把密码暴露给第三方。(即不把QQ账号密码暴露给微博)
1.授权码 authorization code 也是安全等级最高的一版。 支持refresh token 一般都用这个,微博QQ登录就是这种方式。
2.密码 password credentials 支持refresh token 这种安全等级低。谁知道client会不会偷摸存你密码不。一般内部使用
3.简化模式 implicit 不支持refresh token 这种没有获取code的步骤。请求就给token、 没get到这个的优势
4.客户端模式 client credentials 不支持refresh token 这种是被信任的内部client使用。一般内部平台间使用
注: client_id client_secret 是用来oauth server鉴别client用的。
下面详细说明一下各个方式。简化模式就不说了。
四 客户端模式。(grant_type = client_credentials)
使用场景: 一般是内部系统之间的API调用。两个平台之间调用。调用者是以平台为单位。而不是以用户为单位。
举个简单例子:A平台调用B平台的删除API 为了防止B 平台的删除API不被随便调用(即拿到cookie就在postman等