Vert.x 用JWT验证Web请求 译<十>

JSON Web Tokens (RFC 7519) 是推荐的JSON-encoded tokens的标准,特别用来验证一个用户和权限,虽然声称这可以用来干任何事情。

toekn是由服务器发布,由服务器密钥签名,客户端后续的请求带上这个token,服务端和客户端都可以验证这个请求是否合法的。

WARNING:一旦JWT令牌签署,其内容是不加密的,必须通过安全的通过传输(e.g., HTTPS),其中不要包含敏感的数据信息(e.g., passwords, private API keys)

添加JWT支持

在maven依赖中加入vertx-auth-jwt模块:

113547_Q0Cn_2277632.png

我们用JCEKS keystore来放测试用的key,这里我们生成不同长度的合适的可以:

keytool -genseckey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg HMacSHA256 -keysize 2048 -alias HS256 -keypass secret
keytool -genseckey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg HMacSHA384 -keysize 2048 -alias HS384 -keypass secret
keytool -genseckey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg HMacSHA512 -keysize 2048 -alias HS512 -keypass secret
keytool -genkey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg RSA -keysize 2048 -alias RS256 -keypass secret -sigalg SHA256withRSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg RSA -keysize 2048 -alias RS384 -keypass secret -sigalg SHA384withRSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkey -keystore keystore.jceks -storetype jceks -storepass secret -keyalg RSA -keysize 2048 -alias RS512 -keypass secret -sigalg SHA512withRSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES256 -keypass secret -sigalg SHA256withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES384 -keypass secret -sigalg SHA384withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360
keytool -genkeypair -keystore keystore.jceks -storetype jceks -storepass secret -keyalg EC -keysize 256 -alias ES512 -keypass secret -sigalg SHA512withECDSA -dname "CN=,OU=,O=,L=,ST=,C=" -validity 360

我们需要在API routes中接入JWT token的程序:

123447_ZF41_2277632.png

下面的程序员用来生成新的JWT tokens:

123656_BCRP_2277632.png

    1.我们希望登录和密码信息已通过HTTP请求头,我们使用Apache Shiro认证

    2.请求角色roles

    3.我们在token生成username, canCreate, canDelete 和 canUpdate

每个API处理方法应该查询当前用户主体和要求,下面是apiDeletePage做的事情:

124222_2aAB_2277632.png

使用JWT tokens

为了说明JWT token如何工作,让我们为root用户创建一个新的:

124348_kf08_2277632.png

返回的文本中就是我们需要保存的token,我们可以尝试不实用token请求下:

124447_GNvq_2277632.png

通过使用授权的HTTP请求标头,发送一个带有JWT token请求,值急需要在Bearer <token value>。这里我们加上JWT toekn,修正以上的API请求:

124740_jfdC_2277632.png

采用API测试工具

ApiTest需要更新后支持了JWT tokens,我们需要增加一个新的属性来接受token的值

 

private String jwtTokenHeaderValue;

第一步我们先取token中的用户 foo:

125059_A8sz_2277632.png

    1.在header中凭证信息

    2.response payload中是text/plain类型,我们可以用BodyCodec编码

    3.成功后返回tokenRequest future对象,带有token

使用JWT token 需要在发送HTTP请求的时候,通过header返回给服务端:

125446_hqSH_2277632.png

    1.我们把token放到带有Bearer前缀的属性中

    2.把token放到header中

 

原文链接:http://vertx.io/docs/guide-for-java-devs/

103728_2T6n_2277632.png

有什么需要交流的,可以叫我公众号留言:

223108_3TsV_2277632.png

 

转载于:https://my.oschina.net/u/2277632/blog/1587101

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值