登录认证,是每个应用都需要的基础功能。但很多的时候,却都被大家所忽略,不仅安全漏洞严重,而且代码紧耦合, 混乱不堪。Passport项目,正是为了解决登陆认证的事情,让认证模块更透明,减少耦合!
- 什么是认证(Authentication)
- Passport项目介绍
- Passport集成配置说明
- Possport restful api
认证又称“验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。身份验证的方法有很多,基本上可分为:基于 共享密钥的身份验证、基于生物学特征的身份验证和基于公开密钥加密算法的身份验证。登录认证,是用户在访问应用或者网站 时,通过是先注册的用户名和密码,告诉应用使用者的身份,从而获得访问权限的一种操作.几乎所有的应用都需要登陆认证.
Passport项目基于OAuth2.0协议,Oauth2.0协议为用户资源的授权提供了一个安全的、开放而又简易的标准.它以统一身份认 证服务为核心。用户登录统一身份认证服务后,即可使用所有支持统一身份认证服务的管理应用系统。
- 客户端从资源拥有者(最终用户)那里请求授权。授权请求能够直接发送给资源拥有者,或者间接的通过授权服务器发送请求;
- 资源拥有者为客户端授权,给客户端发送一个访问许可(Authorization Code);
- 客户端出示自己的私有证书(client_id 和client_secret)和上一步拿到的访问许可,来向授权服务器请求一个访问令牌;
- 授权服务器验证客户端的私有证书和访问许可的有效性,如果验证有效,则向客户端发送一个访问令牌,访问令牌包括许可的作用域、 有效时间和一些其他属性信息;
- 客户端出示访问令牌向资源服务器请求受保护资源;
- 资源服务器对访问令牌做出响应。
Passport项目提供应用管理、用户管理、用户登录认证、密码修改等相关功能.系统采用B/S结构,提供客户端passport-client和服务端 passport-server.客户端只做集成使用,提供统一的filter(也可自行实现filter),然后通过web.xml配置加入应用做到最小侵入;服务端 提供web管理界面,用来管理应用、用户、授权码、令牌等信息;同时提供统一登录页,登录日志查询.
- 步骤1. 在项目pom.xml中引入Passport-client依赖包, 和Oauth2 client 依赖包
<!--oauth2 client -->
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.authzserver</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.resourceserver</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.common</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.oltu.oauth2</groupId>
<artifactId>org.apache.oltu.oauth2.client</artifactId>
<version>1.0.2</version>
</dependency>
<!-- passport-client -->
<dependency>
<groupId>com.hmt.oauth.passport</groupId>
<artifactId>passport-client</artifactId>
<version>1.0.0</version>
</dependency>
- 步骤2. 创建系统配置文件systemConfigs.properties,请务必保证文件名一致,并在系统启动时加载到内存中,配置示例如下:
passport.client.id=877645414466310
passport.client.secret=7210878826c026946ffcd485b6170086cb935cc9
passport.url=http://127.0.0.1:8081
passport.redirect.url=http://127.0.0.1:8080/app/index.html
- 步骤3. 在项目web.xml文件中新增filter节点.
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.hmt.oauth.passport.web.filter.HmtSessionFilter</filter-class>
<init-param>
<param-name>exceptUrlRegex</param-name>
<!-- 不需要拦截的请求路径,支持正则表达式 -->
<param-value>/(login|logout|status|validate.jpg)</param-value>
</init-param>
<init-param>
<!-- 过滤静态资源文件目录,多个目录使用逗号","分隔 -->
<param-name>ignoreUrlPattern</param-name>
<param-value>/app/bower_components/**,/app/images/**</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
缩写、术语及符号 | 解释 |
---|---|
app_id | 应用唯一标志,对应app key |
app_secret | 应用唯一标志,对应secret或者app secret |
response_type | 授权码标识,系统使用code |
redirect_url | 回调地址 |
access_token | 登录令牌 |
refresh_token | 刷新令牌 |
authorization code | 授权代码 |
scope | 作用域 |
1.获取 authorization_code授权码
通过在浏览器中访问下面的地址,来引导用户授权,并获得 authorization_code
https://passport.xxx.com/oauth2/authorize
参数:
参数名称 | 参数说明 |
---|---|
client_id | 必选参数,应用的唯一标识,对应于appKey |
redirect_uri | 必选参数,应用回掉地址 |
response_type | 必选参数,授权类型,默认code |
loginName | 必选参数,用户登录名 |
password | 必选参数,用户登录密码 |
- 注意:此请求必须是 HTTP POST 方式
接口返回:
{
"code": "string",
"data": {},
"message": "string"
}
2.根据authorization_code授权码获取accessToken
通过在浏览器中访问下面的地址,来引导用户授权,并获得 access_token
https://passport.xxx.com/oauth2/accessToken
参数:
参数名称 | 参数说明 |
---|---|
client_id | 必选参数,应用的唯一标识,对应于appKey |
client_secret | 必选参数,应用secret,对应于appSecret |
redirect_uri | 必选参数,应用回掉地址 |
grant_type | 必选参数,授权码类型,默认code |
redirect_uri | 必选参数,授权后回掉地址 |
code | 必选参数,授权码 |
- 注意:此请求必须是 HTTP POST 方式
接口返回:
{
"code": "string",
"data": {},
"message": "string"
}
3.Token安全检查验证checkAccessToken
通过在浏览器中访问下面的地址,来引导用户验证token是否有效
https://passport.xxx.com/oauth2/checkAccessToken
参数:
参数名称 | 参数说明 |
---|---|
accessToken | 必选参数,应用授权Token |
- 注意:此请求必须是 HTTP POST 方式
接口返回:
{
"code": "string",
"data": {},
"message": "string"
}
4.通过accessToken获取用户信息
通过在浏览器中访问下面的地址,来引导用户通过授权token换取用户信息.
https://passport.xxx.com/api/vi/userInfo
参数:
参数名称 | 参数说明 |
---|---|
access_token | 必选参数,应用授权Token |
- 注意:此请求必须是 HTTP POST 方式
接口返回:
{
"code": "string",
"data": {},
"message": "string"
}
(无)