token

API安全(十)-登陆

大憨熊 提交于 2020-01-30 02:11:44
1、登陆    在前面,我们把图上常见的安全机制都做了一个简单的实现,但是登陆并没有在图中体现,因为并不是每次调用API的时候都需要登陆;登陆只是一个偶尔发生的事情,并不像图中的机制,每一次API的调用都贯穿在其中。但登陆也是整个安全机制中,重要的一环。 2、之前认证中(HttpBasic)存在的缺陷    在前面我们实现的HttpBasic认证逻辑中,每次客户端发请求的时候都要把用户的用户名密码通过base64加密传上来,这样有以下缺点:      2.1、不安全,每次请求都要带用户名和密码,增加了用户名密码泄漏的风险      2.2、每一次传上来用户名和密码以后都要去做check,加密算法校验比较消耗系统资源 3、基于token的身份认证    对于上面的问题,我们可以采用基于token的身份认证,流程如下图;   这样做的好处是:token跟用户名密码是有关联的,但不是直接的关联,从token中没有办法解析出用户名和密码的。不用每次都传用户名和密码,token在服务器端有一个存储,服务器端从客户端拿到token以后,查一下存储中是否存在,就知道用户是否登陆了,不用像之前那样每次请求都要做密码比对。 4、基于cookie和session的实现    对于基于token的身份认证实现有很多,对于java来说最常见的就是基于cookie和session的实现,流程如下图

spring boot整合jwt 实现前后端分离登录认证及授权

主宰稳场 提交于 2020-01-29 18:14:53
一丶 基本介绍 前后端分离的认证及授权有两种方式, 第一种是使用jwt 也就是(Json Web Token),客户端请求服务端,完成账号密码的认证以后,由服务端生成一个带有过期时间的token,返回给客户端,后续每次请求客户端都要带上这个token,服务端从请求中拿到token 进行解析 判断是否过期,然后构建spring security的安全对象,交由spring security框架进行后续的认证等处理.这种方式相比于传统的session方式不同,是无状态的,服务端没有保存和每个客户端对应的session对象,而是由客户端每次请求带上token,服务端进行解析 来判断客户端的身份,这相比传统方式对服务端的压力非常小,不需要保存和每个客户端对应的session对象,而且由于前后端分离,后端更加倾向于提供接口,很多业务逻辑前移,后端只需要认证请求的身份,提供好对应的接口,剩下的权限控制,跳转页面等就交由前端实现. 第二种 就是spring cloud的OAuth2认证方式,我这里没有去研究,所以就不细说了. 我这里也不过多介绍jwt了 百度相关的文章很多,我就直接介绍spring boot怎么整合jwt实现登录认证及授权 首先贴出maven依赖 1 <!-- jwt依赖 --> <dependency> 2 <groupId>io.jsonwebtoken</groupId>

单例模式

谁说我不能喝 提交于 2020-01-29 16:23:32
设计模式大家都很熟悉,今天来记录下最基础也最简单的单例模式 单例模式分为两类,一是饿汉式,另外就是相对的懒汉式 想来看看饿汉式 常见的实现方式如下: 1 public class SingletonHungry { 2 private static SingletonHungry instance = new SingletonHungry(); 3 4 private String token; 5 6 private SingletonHungry() { 7 token = System.currentTimeMillis() + ""; 8 } 9 10 public static SingletonHungry getInstance() { 11 return instance; 12 } 13 14 public String getToken() { 15 return token; 16 } 17 } 新增token来验证线程安全 来个线程安全的 public class SingletonHungrySafe { private static String token; //jvm加载时会实例化 private static class Holder { private static SingletonHungrySafe INSTANCE = new

10.kubernetes danshboard认证及分级授权

强颜欢笑 提交于 2020-01-29 16:11:26
Kubernetes dashbord自身不做认证,认证都是k8s集群来做的。 一、部署 参照官方文档: https://github.com/kubernetes/dashboard [kubelet@master ~]$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml Tips:需要下载下来修改镜像路径,国内不允许访问镜像,可修改为阿里云的镜像仓库地址。registry.cn-shanghai.aliyuncs.com/yingzhuo/kubernetes-dashboard-amd64:v1.10.1 1、部署中修改的地方 避免在安装过程中出错,或者安装后各种各样的问题。如果想一次性安装部署成功,并且能够进入首页,需手动下载kubernetes-dashboard.yaml资源清单,并修改三个地方。 (1)deployment镜像地址 需要下载下来修改镜像路径,国内不允许访问镜像,可修改为阿里云的镜像仓库地址。registry.cn-shanghai.aliyuncs.com/yingzhuo/kubernetes-dashboard-amd64:v1.10.1 (2

使用auth0构建JWT

不问归期 提交于 2020-01-29 15:46:52
写于2019年年底,2020年春,新年好! JWT 全称 Json Web Token 用于用户认证 用于前后端分离项目(App/微信小程序 无法产生cookie的项目) 文中所提到的 Token泛指身份验证时使用的令牌,而JWT,是json 格式的 web token,两者稍作区别 JWT的构成 JWT 官网 点击前往 ,下列数据解释官网内容: 由三段字符串组成,两端中间用 . 分隔 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 . eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ . SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c 第一段字符串: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 HEADER: ALGORITHM & TOKEN TYPE 包含生成token使用的算法与token类型 { "alg" : "HS256" , //ALGORITHM ,默认算法 哈希256 "typ" : "JWT" //TOKEN TYPE ,token类型 } 将该JSON字符串做 base64Url 编码 得到 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

记住我 token保存到数据库

烈酒焚心 提交于 2020-01-29 13:39:03
记住我 token保存到数据库 这里使用jpa+mysql <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/fly-demo?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 设置配置rememberme import javax.sql.DataSource; @Configuration public class WebSecurityConfig

微信网页授权java实现

江枫思渺然 提交于 2020-01-29 08:56:42
功能:主要用于在用户通过手机端微信访问第三方H5页面时 获取用户的身份信息(openId,昵称,头像,所在地等。。)可用来实现微信登录、微信账号绑定、用户身份鉴权等功能。 开发前的准备: 1、需要有一个公众号,拿到AppID和AppSecret; 2、进入公众号开发者中心页配置授权回调域名。具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本信息-修改 注意,这里仅需填写全域名(如www.qq.com、www.baidu.com),勿加 http:// 等协议头及具体的地址字段; 这个域名需要是一个备案过的域名。这个条件比较难办,幸好热心的网友qydev为我们无私地提供了一个备案过的域名,我们可以通过使用Ngrok来虚拟一个域名映射到本地开发环境,简直是web开发神器啊。。 qydev版Ngrok使用说明及下载地址: http://www.qydev.com/ 本文以 lovebread.tunnel.qydev.com 域名为例: 3、如果嫌手机上测试麻烦,可以使用微信官方提供的web开发者工具直接在浏览器中进行调试。 前提是需要在微信公众号中绑定开发者账号:登录公众号-开发者工具-进入web开发者工具-绑定web开发者微信账号 使用说明及下载地址: https://mp.weixin.qq.com/wiki?action=doc&id=mp1455784140&t=0

Android AsyncQueryHandler类

前提是你 提交于 2020-01-29 05:36:36
AsyncQueryHandler 是用于 ContentProvider 上执行异步的CRUD操作。 1. AsyncQueryHandler类 AsyncQueryHandler 类继承 Handler 类,通过封装 ContentResolver 来实现对 ContentProvider 的异步操作。 public AsyncQueryHandler(ContentResolver cr) { super(); mResolver = new WeakReference<ContentResolver>(cr); synchronized (AsyncQueryHandler.class) { if (sLooper == null) { HandlerThread thread = new HandlerThread("AsyncQueryWorker"); thread.start(); sLooper = thread.getLooper(); } } mWorkerThreadHandler = createHandler(sLooper); } protected Handler createHandler(Looper looper) { return new WorkerHandler(looper); } 2. WorkerHandler类

权限的功能及源码流程

不打扰是莪最后的温柔 提交于 2020-01-29 04:04:01
基本使用 问题: 不同的视图赋予不同的权限,以用来访问 views.py from django.shortcuts import render, HttpResponse from django.http import JsonResponse from rest_framework.views import APIView from api import models ORDER_DICT = { 1: { 'name': 'qiu', 'age': 18, 'gender': '男', 'content': '...' }, 2: { 'name': 'xi', 'age': 19, 'gender': '男', 'content': '.....' } } def md5(user): import hashlib import time ctime = str(time.time()) m = hashlib.md5(bytes(user, encoding='utf-8')) m.update(bytes(ctime, encoding='utf-8')) return m.hexdigest() class AuthView(APIView): authentication_classes = [] def post(self, request, *args, *

实战精髓,项目级登录鉴权方案及权限跳转【Node vs Vue】

两盒软妹~` 提交于 2020-01-29 00:18:16
前言 不管是企业项目,还是个人项目,一个优秀的系统必须具有鉴权的能力,何为 鉴权 ,是指验证用户是否拥有访问系统的权利。 前端鉴权的方式也很多,例如 HTTP Basic Authentication 、 session-cookie 、 OAuth(开放授权) 、 JWT ··· 本章通过 node.js vue 为框架,模拟出一套较为完整的前后端配合鉴权方案(采用 JWT 鉴权理念) ❗ PS:本章对基本知识不会有过多讲解,主要对涉及技术的应用进行代码演示 需求分析 登录成功时,后端返回 Token 值 token 必须带有时效性,过期则无效 前端调用接口时,需要携带上 token 才能访问 前端在跳转需要权限的页面时,需要判断当前是否已经登录,以及是否登录过期 技术栈 Vue、Node.js 作为前后端开发框架 axios 作为请求接口的HTTP库 express 作为接口开发的框架 Node.js涉及库 body-parser - 处理POST数据 bcrypt - 密码加密以及解密匹配 jwt jsonwebtoken - 生成token passport、passport-jwt - 解析token jwt-decode - 前端解析token以token获取有效时间 mongoose 连接Mongo数据库 Node.js 后台开发 初始化Express