JWT

JWT令牌生成采用非对称加密算法

1、生成密钥keytool   -genkeypair   -alias xckey  -keyalg RSA   -keypass xuecheng   -keystore xc.keystore   -storepass xuechengkeystore

Keytool 是一个java提供的证书管理工具

-alias:密钥的别名-keyalg:使用的hash算法

-keypass:该密钥的密码-keystore:密钥文件名

-storepass:密钥库的密码

查询证书信息:keytool -list -keystore xc.keystore

删除别名keytool -delete -alias xckey -keystore xc.keystore

2、生成公钥由于要使用openssl,需要先安装安装 openssl:http://slproweb.com/products/Win32OpenSSL.html安装资料目录下的 Win64OpenSSL-1_1_0g.exe配置openssl的path环境变量,本教程配置在D:\OpenSSL-Win64\bincmd进入xc.keystore目录keytool?‐list?‐rfc?‐‐keystore?xc.keystore?| openssl?x509?‐inform?pem?‐pubkey输入密钥库密码:

下边这一段就是公钥内容:-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAijyxMdq4S6L1Af1rtB8SjCZHNgsQG8JTfGy55eYvzG0B/E4AudR2prSRBvF7NYPL47scRCNPgLnvbQczBHbBug6uOr78qnWsYxHlW6Aa5dI5NsmOD4DLtSw8eX0hFyK5Fj6ScYOSFBz9cd1nNTvx2+oIv0lJDcpQdQhsfgsEr1ntvWterZt/8r7xNN83gHYuZ6TM5MYvjQNBc5qC7Krs9wM7UoQuL+s0X6RlOib7/mcLn/lFLsLDdYQAZkSDx/6+t+1oHdMarChIPYT1sx9Dwj2j2mvFNDTKKKKAq0cv14Vrhz67Vjmz2yMJePDqUi0JYS2r0iIo7n8vN7s83v5uOQIDAQAB-----END PUBLIC KEY-----将上边的公钥拷贝到文本文件中,合并为一行。-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgrgHI1DUk4Jg+FT5gcI+TZcAgbqkNUOk4bW/3DgMFNpoWqq4an0u9Fma4aWTy9Mr2qPpCd+sQldJdgeXm1vJmtL6q6YZWRdU6rbPjhXiukAwqnwWDCN1puiUIRbCZeOjrhRSq9LAqANlI7z1ogMYkqcz0kc54o1e0l7NEAYzKCr1Q19FCqwWBmsBPrEtjNgy7+1/VSWgpV2U71RwVe2VILjyMnTKiuZr6K607f7YeSNe925n8MK6A2TctmoDDsA3k2wQ3WsKuYr6WxcB6y7pceto79sCSWJzhTIih7MHVu2uKQnVxrfkgV4LERQ/MdNDzAeoKVqzrx4uLcqVtefyBQIDAQAB-----END PUBLIC KEY-----

授权码模式:请求认证服务获取授权码:/oauth/authorizeget请求:localhost:40400/auth/oauth/authorize? /auth 自己设置的根路径 client_id=XcWebApp&response_type=code&scop=app&redirect_uri=http://localhost参数列表如下:(数据库中的 oauth_client_details)client_id:

客户端id,和授权配置类中设置的客户端id一致。

response_type:授权码模式固定为codescop:客户端范围,和授权配置类中设置的scop一致。redirect_uri:跳转uri,当授权码申请成功后会跳转到此地址,并在后边带上code参数(授权码)。拿到授权码后,申请令牌。/oauth/tokenPost请求:http://localhost:40400/auth/oauth/token参数如下:

grant_type:授权类型,填写authorization_code,表示授权码模式code:授权码,就是刚刚获取的授权码,注意:授权码只使用一次就无效了,需要重新申请。

redirect_uri:申请授权码时的跳转url,一定和申请授权码时用的redirect_uri一致。此链接需要使用 http Basic认证。

什么是http Basic认证?(post man : Authorization - Basic Auth)http协议定义的一种认证方式,将客户端id和客户端密码按照“客户端ID:客户端密码”的格式拼接,并用base64编码,放在header中请求服务端,一个例子:Authorization:Basic WGNXZWJBcHA6WGNXZWJBcHA=WGNXZWJBcHA6WGNXZWJBcHA= 是用户名:密码的base64编码。认证失败服务端返回 401 Unauthorized以上测试使用postman完成:

access_token:访问令牌,携带此令牌访问资源

token_type:有MAC Token与Bearer Token两种类型,两种的校验算法不同,RFC 6750建议Oauth2采用 BearerToken(http://www.rfcreader.com/#rfc6750)。

refresh_token:刷新令牌,使用此令牌可以延长访问令牌的过期时间。

expires_in:过期时间,单位为秒。scope:范围,与定义的客户端范围一致。

资源服务要想校验令牌:

1.把公钥放在根路径下

2.导入坐标:org.springframework.bootspring‐boot‐starter‐securityorg.springframework.security.oauthspring‐security‐oauth2org.springframework.securityspring‐security‐jwt

3.在每个资源服务考入配置类如何进行认证测试:请求时携带令牌:(postman 进行测试)在headerers中添加 Authorization: Bearer 令牌内容密码模式:直接申请令牌。

密码模式(Resource Owner Password Credentials)与授权码模式的区别是申请令牌不再使用授权码,而是直接通过用户名和密码即可申请令牌。测试如下:Post请求:http://localhost:40400/auth/oauth/token参数:

grant_type:密码模式授权填写passwordusername:账号

password:密码并且此链接需要使用 http Basic认证。

注意:当令牌没有过期时同一个用户再次申请令牌则不再颁发新令牌。

校验令牌:/oauth/check_tokenSpring Security Oauth2提供校验令牌的端点,如下:Get: http://localhost:40400/auth/oauth/check_token?token=参数:token:令牌

注意:此请求需要进行Http basic认证。

exp:过期时间,long类型,距离1970年的秒数(new Date().getTime()可得到当前时间距离1970年的毫秒数)。

user_name: 用户名client_id:客户端Id,在oauth_client_details中配置

scope:客户端范围,在oauth_client_details表中配置jti:与令牌对应的唯一标识刷新令牌:刷新令牌是当令牌快过期时重新生成一个令牌,它于授权码授权和密码授权生成令牌不同,刷新令牌不需要授权码也不需要账号和密码,只需要一个刷新令牌、客户端id和客户端密码。

测试如下:Post:http://localhost:40400/auth/oauth/token

参数:grant_type : 固定为 refresh_tokenrefresh_token:刷新令牌(注意不是access_token,而是refresh_token)

注意:此请求需要http basic认证。刷新令牌成功,会重新生成新的访问令牌和刷新令牌,令牌的有效期也比旧令牌长。刷新令牌通常是在令牌快过期时进行刷新。/oauth/confirm_access/oauth/error

JWT:令牌构建的方式

你可能感兴趣的:(JWT)