美文网首页
微服务 授权与验证

微服务 授权与验证

作者: 乘以零 | 来源:发表于2018-09-29 16:23 被阅读0次

授权

  • 采用 ngxin, 后期可考虑 OpenResty(nginx+lua)
  • 以ubuntu为例
    > cd /etc/nginx/
    > htpasswd -c -d /etc/nginx/passwd.db  username
    > password
    
  • 改nginx配置文件
    > cd /etc/nginx/
    > vi nginx.conf
      server {
          auth_basic "User Authentication";
          auth_basic_user_file /etc/nginx/passwd.db;
      }
    > nginx -s reload
    
  • 之后每个请求都必须带上 username:password
  • spring restTemplate
    HttpHeaders createHeaders(String username, String password){
        return new HttpHeaders() {{
            String auth = username + ":" + password;
            byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII")) );
            String authHeader = "Basic " + new String( encodedAuth );
            set( "Authorization", authHeader );
        }};
    }
    clazz result = restTemplate.exchange(uri, HttpMethod.POST, new HttpEntity<T>(createHeaders("username", "password")), clazz);
    
    

or

restTemplate.getInterceptors().add(new BasicAuthorizationInterceptor("username", "password"));


认证

  • app_key app_secret 相当于这个app的用户名 密码 用一个表维护 将来可以为不同的app分配不同的接口访问权限
  • RSA public_key private_key RSA加密的公钥 秘钥 参数加密使用 防止明文传输
  • time_millis 当前时间 between the current time and midnight, January 1, 1970 UTC. 每个请求必带
  • user_id 登入后的user_id 未登入状态不需要传值 需要登入的每个请求必带
  • sign 根据参数md5后的签名 每个请求必带
  • token 登入后的标示 需要登入的每个请求必带
  • 未登入情况下
      1. http://app.yiwugou.com/login.html?time_millis={time_millis} post {username:"username",password:"password"}
      1. 获取参数的键值对 time_millis={time_millis}&username={username}&password={password} 如果是post方式 也把post的值加入到键值对中 统一加密
      1. 加入app_key app_secret 后 按照参数的ascii码排序 得到 app_key={appkey}&app_secret={secret}&password={password}&time_millis={time_millis}&username={username} 记为 param_after_sort
      1. 对上述字段进行md5后 得到sign签名 sign=MD5(param_after_sort)
      1. 对 param_after_sort 删除app_secret,加上sigin 得到 app_key={appkey}&password={password}&time_millis={time_millis}&username={username}&sign={sign} 记为 param_after_sign
      1. 对 param_after_sign 进行RSA加密 得到 data = RSA(param_after_sign)
      1. 最终的传值为
        ** post http://app.yiwugou.com/login.html {app_key:{app_key},data:{data}} (建议采用这种方式 防止数据量过大)
        ** get http://app.yiwugou.com/login.html?app_key={app_key}&data={data}
    • 如需加入统计参数 如(shop_id,product_id,即不影响具体业务的) 则在上述加密处理完成之后加上特定的参数即可 统计参数不影响加密 如
      ** post http://app.yiwugou.com/login.html?shop_id={shop_id} {app_key:{app_key},data:{data}}
      ** get http://app.yiwugou.com/login.html?product_id={product_id}&shop_id={shop_id}&app_key={app_key}&data={data} 参数顺序随意
  • 登入后 返回 RSA(token),防止被人抓包解密token,app端解密;
  • 在上面的第3步中加入 token user_id 后排序 得到 app_key={app_key}&app_secret={app_secret}&password={password}&time_millis={time_millis}&token={token}&user_id={user_id}&username={username}
  • 其他照常进行

相关文章

  • 微服务 授权与验证

    授权 采用 ngxin, 后期可考虑 OpenResty(nginx+lua) 以ubuntu为例> cd /et...

  • 微信公众平台接口

    项目地址 [x] 验证服务器地址的有效性 [x] 定时任务刷新获取 access_token [x] 微信登录授权...

  • SpringBoot2 整合OAuth2组件,模拟第三方授权访问

    一、模式描述 授权服务 验证第三方服务的身份,验证邮箱用户的身份,记录和管理认证Token,为资源服务器提供Tok...

  • shiro验证与授权

    Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 Shiro有三大核心组件: ...

  • 4.1 身份认证服务概述

    OpenStack 身份服务为管理身份验证、授权和服务提供了单一的集成点。 身份认证服务通常是用户与之交互的第一个...

  • 菜鸟带你看传说中的微信开发!

    1.微信开发原理微信客户端->微信服务器->开发绑定的服务器。微信开发步骤: 2.微信验证服务器原理(验证服务器的...

  • 微信公众号授权与Shiro权限框架整合

    微信公众号授权与Shiro权限框架整合 背景 微信公众号授权之后,想访问本地服务器的资源。 实现 创建新的Toke...

  • (认证、授权和记账)简介

    AAA(身份验证,授权和记账)简介 AAA服务器 AAA是认证,授权和计费(认证,授权,计费)的三个英文字的缩写。...

  • Mysql 忘记密码找回

    停止Mysql服务 使用mysql_safe 附带的 “--skip-grant-tables”(忽略授权登录验证...

  • 赞赞羊技术服务支持

    一、登陆页面 验证码登陆输入手机号获取验证码——输入获取的验证码——点击登录——进入首页 三方授权登录(仅微信授权...

网友评论

      本文标题:微服务 授权与验证

      本文链接:https://www.haomeiwen.com/subject/xxlboftx.html