• 关于

    密码认证协议怎么看配置

    的搜索结果

回答

一.背景 微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务。 每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢? 不是说你想调用就可以调用,一定要有认证机制,是我们内部服务发出的请求,才可以调用我们的接口。 需要注意的是我们这边讲的是微服务之间调用的安全认证,不是统一的在API官网认证,需求不一样,API网关处的统一认证是和业务挂钩的,我们这边是为了防止接口被别人随便调用。 二.方案 OAUTH2 Spring Cloud可以使用OAUTH2来实现多个微服务的统一认证授权 通过向OAUTH2服务进行集中认证和授权,获得access_token 而这个token是受其他微服务信任的,在后续的访问中都把access_token带过去,从而实现了微服务的统一认证授权。 JWT JWT是一种安全标准。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个Token,用户可以使用这个token访问服务器上受保护的资源。 感觉这2种好像没多大区别呀,其实是有区别的:OAuth2是一种授权框架 ,JWT是一种认证协议 无论使用哪种方式切记用HTTPS来保证数据的安全性。 三.用哪种 我个人建议用JWT,轻量级,简单,适合分布式无状态的应用 用OAUTH2的话就麻烦点,各种角色,认证类型,客户端等等一大堆概念 四.怎么用 首先呢创建一个通用的认证服务,提供认证操作,认证成功后返回一个token @RestController@RequestMapping(value="/oauth")public class AuthController { @Autowired private AuthService authService; @PostMapping("/token") public ResponseData auth(@RequestBody AuthQuery query) throws Exception { if (StringUtils.isBlank(query.getAccessKey()) || StringUtils.isBlank(query.getSecretKey())) { return ResponseData.failByParam("accessKey and secretKey not null"); } User user = authService.auth(query); if (user == null) { return ResponseData.failByParam("认证失败"); } JWTUtils jwt = JWTUtils.getInstance(); return ResponseData.ok(jwt.getToken(user.getId().toString())); } @GetMapping("/token") public ResponseData oauth(AuthQuery query) throws Exception { if (StringUtils.isBlank(query.getAccessKey()) || StringUtils.isBlank(query.getSecretKey())) { return ResponseData.failByParam("accessKey and secretKey not null"); } User user = authService.auth(query); if (user == null) { return ResponseData.failByParam("认证失败"); } JWTUtils jwt = JWTUtils.getInstance(); return ResponseData.ok(jwt.getToken(user.getId().toString())); } } JWT可以加入依赖,然后写个工具类即可,建议写在全局的包中,所有的服务都要用,具体代码请参考:JWTUtils GITHUB地址:https://github.com/jwtk/jjwt JWT提供了很多加密的算法,我这边用的是RSA,目前是用的一套公钥以及私钥,这种做法目前来说是不好的,因为万一秘钥泄露了,那就谈不上安全了,所以后面会采用配置中心的方式来动态管理秘钥。 类里主要逻辑是生成token,然后提供一个检查token是否合法的方法,以及是否过期等等判断。 <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> 统一认证的服务有了,我们只需要将认证服务注册到注册中心即可给别的服务消费。 那么我们如何使用刚刚的认证服务来做认证呢,最简单的办法就是用Filter来处理 比如说我现在有一个服务fangjia-fsh-house-service,之前是随便谁都能调用我提供的接口,现在我想加入验证,只有验证通过的才可以让它调用我的接口 那就在fangjia-fsh-house-service中加一个过滤器来判断是否有权限调用接口,我们从请求头中获取认证的token信息,不需要依赖Cookie 这个过滤器我也建议写在全局的项目中,因为也是所有服务都要用,代码请参考:HttpBasicAuthorizeFilter 主要逻辑就是获取token然后通过JWTUtils来验证是否合法,不合法给提示,合法则放过 这边需要注意的地方是解密的秘钥必须跟加密时是相同的,不然解密必然失败,就是bug了 //验证TOKENif (!StringUtils.hasText(auth)) { PrintWriter print = httpResponse.getWriter(); print.write(JsonUtils.toJson(ResponseData.fail("非法请求【缺少Authorization信息】", ResponseCode.NO_AUTH_CODE.getCode()))); return; }JWTUtils.JWTResult jwt = jwtUtils.checkToken(auth);if (!jwt.isStatus()) { PrintWriter print = httpResponse.getWriter(); print.write(JsonUtils.toJson(ResponseData.fail(jwt.getMsg(), jwt.getCode()))); return; }chain.doFilter(httpRequest, response); 到这步为止,只要调用方在认证通过之后,通过认证服务返回的token,然后塞到请求头Authorization中,就可以调用其他需要认证的服务了。 这样看起来貌似很完美,但是用起来不方便呀,每次调用前都需要去认证,然后塞请求头,如何做到通用呢,不需要具体的开发人员去关心,对使用者透明,下篇文章,我们继续探讨如何实现方便的调用。 具体代码可以参考我的github: https://github.com/yinjihuan/spring-cloud

小六码奴 2019-12-02 02:03:21 0 浏览量 回答数 0

回答

###l 用C语言实现了很多种常见的加密算法: 三个组件: 1、libcrypto 库文件 专门实现加密解密的库文件, 2、libssl 库文件,主要是实现https这样协议 3、openssl 多用途加密工具,还可以制作一个CA出来 一般来讲openssl都会装上,使用一个openssl加一个错误的选项就能看见它的使用 选项 单项加密时的用法: openssl enc -des3 -salt -a -in inittab -out inittab.des3 实现对于一个文件加密 enc是加密 -des3是加密算法 -salt 加入杂质 -in后面跟文件名 -out加密后放在哪个文件里 openssl enc -d -des3 -salt -a -in inittab.des3 -out inittab -d表示解密 openssl dgst -sha inittab 表示计算inittab文件的特征值 用户认证时passwd的用法,怎么去帮你生成一个类似于保存在/etc/shadow文件里的密码一样 openssl passwd -1 -1表示使用MD5算法 [root@server46 ~]# openssl passwd -1 Password: Verifying - Password: $1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 openssl passwd -1 -salt 杂质 这样计算结果就一样了 [root@server46 ~]# openssl passwd -1 Password: Verifying - Password: $1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 [root@server46 ~]# openssl passwd -1 -salt 7HW0kv8y Password: $1$7HW0kv8y$IntkyNppqtTQ2fHAJ1FMk1 man sslpasswd可以查看用法 非对称加密: openssl怎样发证: 切换目录到/etc/pki/tls/certs make *.key就可以产生一个密钥 make *.cert可以生成一个证书,主要是看文件后缀生成文件,是redhat提供的便捷方式 make my.key就可以生成一个密钥 (umask 66;openssl genrsa 1024 > my.key) 生成私钥文件 这是在一个子shell里进行,umask只对后面的这一个命令有效,umask执行完以后就恢复到原来 提取公钥: openssl rsa -in my.key -pubout -out myr.pubkey [root@server46 certs]# (umask 66; openssl genrsa 1024 > my.key) Generating RSA private key, 1024 bit long modulus ...++++++ ........++++++ e is 65537 (0x10001) [root@server46 certs]# cat my.key -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDRSlvZZ7p7sRbczdGhcw/8z5mzEKIjDZw63ffsxCDC9XWKO0vE FaxbPrgwZYF+iu8QHUKVzuJoqO8MmfY7p9aGz2WT2GQ/wUTnjsbL8mNbSclV/2m8 K0XZqSLsKzuhaBOFC+sylQvnZiXP23slNWZIuV0EVh9k2ULSV4f8B5QtywIDAQAB AoGATNkA4NM1pjVgL7NjReT5+dpAlX+GCVj2BKd8YXOik/ONNTSQnW9X2ikteJfM 9KoPHdugl2FfwQ5GuFnQEBeQrUV5SnR09k2OZTsdOMVNXqamf4V/rXidOs+L3RVK Q4X6vpasS1CJ1/q/fCcsi1Nl0nLcV9stLXbmEzYqE6+hwAECQQDqxrbF5W9j5vVM ZkKmvx1ViojwTJovlkOtl6RSkqHMR3msnHhizbc+iGrGiP/vH9H+AvDK7AJPNVng kHAa5YGbAkEA5DXX0dIajPoAdLvmNG1kNY1fp6IJjfR8UJRWeOwjhVjul1yp47hP bM/f55OmowdsQamfNVwk4P5iYIcZ8uwfkQJBAJoXToLYsaF6Rumb/IcAzLoGMRa2 0EQHdegLrVhc0UEIcH2wPPtsVab/VkV0SbaixerX9z7YZDOkqpbPdiTRGZ0CQBWv 2DakVMmY6HovcQ0CaEd+i9yOVYIb/cRalG0hY67EaMgRkkOFvGaGyqxjJ67Ogccr q2mSvB51jjvGGv0u20ECQQCHvgJkF3xHkQnahqCTTgym0CNocHhVfyo6KveIfBAk Vz69+zsGK2kKBOseSbgRKqVmM21Iqu0aZatjEevHwZIo -----END RSA PRIVATE KEY----- [root@server46 certs]# openssl rsa -in my.key -pubout -out my.pubkey writing RSA key [root@server46 certs]# cat my.pubkey -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRSlvZZ7p7sRbczdGhcw/8z5mz EKIjDZw63ffsxCDC9XWKO0vEFaxbPrgwZYF+iu8QHUKVzuJoqO8MmfY7p9aGz2WT 2GQ/wUTnjsbL8mNbSclV/2m8K0XZqSLsKzuhaBOFC+sylQvnZiXP23slNWZIuV0E Vh9k2ULSV4f8B5QtywIDAQAB -----END PUBLIC KEY----- 发证步骤: 1、首先生成一对密钥(S/P密钥) 2、然后把公钥放在一个叫证书颁发请求里(里面包括你的公钥,姓名,地址,等一些列描述信息) 发送到证书颁发机构 3、CRT证书就生成了 自己成为CA: 1、cd /etc/pki/CA 有一个 private 文件,里面专门放CA的私钥文件 2、给自己生成一个密钥 (umask 66; openssl genrsa 2048 > private/cakey.pem[这里只能叫cakey.pem]) ll private 给自己发证书: openssl req -new -x509 -key private/cake.pem -out cacert.pem openssl req -new -x509 -key private/cake.pem -out cacert.pem 接下来会提示你输入一些信息 写完之后就是一个自签的证书 接下来就可以给别人发证了 view plaincopy to clipboardprint? openssl req -new -x509 -key private/cake.pem -out cacert.pem -days3655 openssl req -new -x509 -key private/cake.pem -out cacert.pem -days3655 3、编辑cA的配置文件 view plaincopy to clipboardprint? vim /etc/pki/tls/openssl.cnf这里定义了 vim /etc/pki/tls/openssl.cnf这里定义了 找到【 CA_default 】字段 修改 dir 改为绝对路径 这里有些目录没有需要我们手动建立,在这个配置文件内我们都能找到 然后还可以修改默认信息 到这里才 算是一个完整的CA 4、接下来给web服务器做一个证书: view plaincopy to clipboardprint? cd /etc/httpd mkdir ssl cd ssl (umask 66;openssl genrsa 2048 > web.key) cd /etc/pki/CA mkdir certs crl newcerts touch index.txt serial echo 01 > serial openssl req -new -key wed.key -out wed.csr 这是一个证书颁发请求 opssl ca -in wed.csr -out web.crt 颁发证书 cd /etc/httpd mkdir ssl cd ssl (umask 66;openssl genrsa 2048 > web.key) cd /etc/pki/CA mkdir certs crl newcerts touch index.txt serial echo 01 > serial openssl req -new -key wed.key -out wed.csr 这是一个证书颁发请求 opssl ca -in wed.csr -out web.crt 颁发证书 然后敲两次回车 就ok了

小哇 2019-12-02 01:26:47 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅