token

SSO单点登录

走远了吗. 提交于 2020-04-06 07:35:15
前言:今天刚学完B站up主“楠哥教你学Java”前些日子的一个直播教学,通过录播跟着把代码敲了一遍,整理了一下。前半部分取自楠哥的笔记,后部分代码和思维导图自己归纳总结,代码细节今天是撸不完了,明后天在多研究几遍一些细节 单点登录 什么是单点登录:一处登录,处处登录,一处登出,处处登出。 用户只需要登录一次就可以访问所有相互信任的应用系统。 SSO Single Sign On 单点登录 企业业务整合解决方案 一票通 SSO 原理 当用户第一次访问淘宝的时候,因为还没有登录,会被引导到认证中心进行登录。 根据用户提供的登录信息,认证系统进行身份验证,如果通过,则登录成功,并返回给用户一个认证的凭据(token)。 当用户访问天猫时,就会将这个 token 带上,作为自己认证的凭据。 应用系统接收到请求后会把 token 送到认证中心进行校验,检查 token 的合法性。 如果通过校验,用户就可以在不用再次登录的情况下访问天猫了。 SSO 实现技术 Cookie 单点登录 使用 Cookie 作为媒介,存放用户凭证。 用户登录淘宝之后,返回一个 token,存入客户端的 Cookie 中,当用户访问天猫的时候,会自动带上 Cookie,这样 token 又传给了认证中心,进行校验。 分布式 Session 1、用户第一次登录时,将会话信息,写入分布式 Session。 2

App接口设计之token的php实现

巧了我就是萌 提交于 2020-04-06 04:00:33
为了保证移动端和服务端数据传输相对安全,需要对接口进行加密传输。 一、ttoken的设计目的: 因为APP端没有和PC端一样的 session机制 ,所以无法判断用户是否登陆,以及无法保持用户状态,所以就需要一种机制来实现session, 这就是token的作用 token 是用户登陆的唯一票据,只要APP传来的token和服务器端一致,就能证明你已经登陆(就和你去看电影一样,需要买票,拿着票就能进了) 二、token设计时的种类: (1)第三方登陆型:    这种token形如微信的access_token,设计原理是按照OAuth2.0来的,其特点是 定时刷新(比如两小时刷新) ,目的是因为数据源将登陆权限赋予第三方服务器时必须要控制其有效期和权限,要不然第三方服务器可以不经过用户同意,无限期从数据源服务器获取用户任意数据。 (2)APP自用登陆型:   这种token就是一般的APP用的token,因为不经过第三方,而是用户直接取数据源服务器数据,所以设计比较随意,只需要保证其token的唯一性就行。 三、APP自用登陆型token实现步骤: (1)数据库用户表添加 token字段 和 time_out这个token过期时间字段 (2)用户登陆时(注册时自动登陆也需要)生成 一个token和过期时间存入表中 (3)在其他 接口调用前 , 判断token是否正确 ,正确则继续

spring环境下整合jwt(加密,解密)

柔情痞子 提交于 2020-04-06 03:25:10
首先先说明一下什么是jwt? 大白话:在用户没有登陆时账号时访问的页面东西是残缺的,不完整的; 登录后方可查看完整信息; 如何实现的? 在每一个请求头上加上一个token,有该token的请求方可被网关过滤器放行; 没有该token的请求都将被网关过滤器拦截并且返回响应状态码403 token怎么来的? jwt加密已登录的用户信息=>token 如何加到请求中? 1.先将token随着响应体返回到浏览器,浏览器端保存到sessionstorage中 2.在每次点发送请求前取出sessionstorage中的用户数据加入到请求头中 那我自己随便写一个token不就可以了吗还要加密好麻烦? 不可以. 因为网关过滤器在拿到token是会根据当前项目的用户类进行jwt解密;能成功解密的才是一个正确的用户; 为什么要加密啊,直接把用户数据放到token中不行吗? 不可以,会泄露用户信息的; 具体怎么实现的呢? 见下图: 来源: oschina 链接: https://my.oschina.net/ilovejava/blog/3215736

Apache Solr使用自定义QParser后同义词扩展及Token去重的感悟

旧巷老猫 提交于 2020-04-06 02:27:09
好久没写博客了。近期在用solr做一套系统,期间有不少心得尚未记录。这里先记录一下solr中自定义QParser如何与SynonymFilter和RemoveDuplicatesTokenFilter配合以实现检索时Token同义词扩展与Token去重。 起初按照 solr wiki上的说明 ,在schema.xml里配置了如下filter: 1 < analyzer type = "query" > 2 < tokenizer class = "org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength = "true" /> 3 < filter class = "solr.StopFilterFactory" ignoreCase = "true" words = "stopwords.txt" enablePositionIncrements = "true" /> 4 < filter class = "solr.LowerCaseFilterFactory" /> 5 < filter class = "solr.SynonymFilterFactory" synonyms = "synonyms.txt" ignoreCase = "true" expand = "true" /> 6 < filter

Django中使用第三方登录

那年仲夏 提交于 2020-04-04 17:53:15
OAuth2.0是什么 OAuth的英文全称是Open Authorization,它是一种开放授权协议。OAuth目前共有2个版本,2007年12月的1.0版(之后有一个修正版1.0a)和2010年4月的2.0版,1.0版本存在严重安全漏洞,而2.0版解决了该问题。 OAuth简单说就是一种授权的协议,只要授权方和被授权方遵守这个协议去写代码提供服务,那双方就是实现了OAuth模式。 OAuth2.0实现第三方登录的流程 例如你想登录豆瓣去看看电影评论,但你丫的从来没注册过豆瓣账号,又不想新注册一个再使用豆瓣,怎么办呢?不用担心,豆瓣已经为你这种懒人做了准备,用你的qq号可以授权给豆瓣进行登录。流程如下: 第一步:在豆瓣官网点击用qq登录 当你点击用qq登录的小图标时,实际上是向豆瓣的服务器发起了一个 http://www.douban.com/leadToAuthorize 的请求,豆瓣服务器会响应一个重定向地址,指向qq授权登录。 浏览器接到重定向地址 http://www.qq.com/authorize?callback=www.douban.com/callback ,再次访问。并注意到这次访问带了一个参数是callback,以便qq那边授权成功再次让浏览器发起这个callback请求。不然qq怎么知道你让我授权后要返回那个页面啊,每天让我授权的像豆瓣这样的网站这么多。

关于前端的网络攻击

流过昼夜 提交于 2020-04-04 15:41:34
XXS跨站脚本攻击 XSS即跨站脚本(cross site script),XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。 存储型XSS攻击 通过一些用户可以输入的界面,比如评论,填入一些非法字符,如><script>alert(document.cookie)</script>等类似的方式,导致网页做些这个“史壳郎”想要的一些操作。 这种现象的产生原因是,前端模板或者后端模板在渲染的时候没有进行字符转译,导致 <> 这样的字符直接就渲染到了页面上。所以,我们只需要在渲染前做一次转译,将这些符号转为字符实体就好了。现在的前端库,如vue,react,前端模板ejs,juicer,后端模板smarty,blade等,都已经内部做了转译了,可以直接使用。 如: 如果前端后端都没有做任何处理的话,以下这段评论在提交以后就会原封不动地展示在html上。而这个时候,script里的代码执行了,导致所有访问这个页面的用户的cookie都发送到了黑客指定的API。 前端倒是在渲染的时候可以做相应的处理,比如可以用以下方法处理: processedContent(comment) { return comment .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g,

什么是 JWT -- JSON WEB TOKEN

末鹿安然 提交于 2020-04-04 09:34:04
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准( (RFC 7519 ).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。 起源 说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。 传统的session认证 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。 但是这种基于session的认证使应用本身很难得到扩展,随着不同客户端用户的增加,独立的服务器已无法承载更多的用户,而这时候基于session认证应用的问题就会暴露出来.

Spring Security OAuth2 源码分析

痴心易碎 提交于 2020-04-04 06:18:50
Spring Security OAuth2 主要两部分功能:1、生成token,2、验证token,最大概的流程进行了一次梳理 1、Server端生成token (post /oauth/token) AuthorizationServerSecurityConfigurer 在配置阶段 如果允许form表单提交则会经过ClientCredentialsTokenEndpointFilter, 剩下的流程可以总结为 生成token、存储token。 生成token:按类型生成token,类型与oauth2四种类型(密码、授权码、客户端、简化)模式相对 存储token: 支持 内存、redis、数据库、等多种方式 2、Resource 端验证token (访问受限接口) ResourceSecurityConfigurer在配置阶段,对Resource进行配置, OAuth2核心过滤器 OAuth2AuthenticationProcessingFilter, 如果请求中存在token 则进行验证,如果不存在则不验证(但是Spring Security会对接口权限进行验证)。 存在token流程: 根据 配置的 userInfoEndpointUrl 到 server获取token的授权信息 OAuthAuthentication。 根据返回结果判断token是否有效(

ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记

青春壹個敷衍的年華 提交于 2020-04-04 02:48:19
任务4:第一章计划与目录 敏捷产品开发流程 原型预览与业务介绍 整体架构设计 API 接口设计 / swagger Identity Server 4 搭建登录 账号 API 实现 配置中心 任务5:业务介绍 项目背景:基于人脉关系的金融行业项目 用户: 1、账号: 基本资料维护 登录 2、管理自己的项目 创建 分享(可见权限范围) 置顶 查看项目进展 3、引入别人的项目 查看好友的项目 查看二度人脉的项目 查看系统推荐的项目 查看别人的项目 参与别人的项目 4、消息: 聊天消息 系统消息 5、好友: 添加好友(导入通信录,手机号搜索好友) 任务6:架构设计 任务7:oAuth2介绍 OAuth是一个关于授权(authorization)的开放网络标准 四种授权方式: 授权码模式 简化模式 密码模式 客户端模式 理解OAuth 2.0: https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 任务8:IdentityServer4登录中心 新建项目 dotnet new webapi --name IdentityServerCenter 添加 Nuget 包:IdentityServer4 VS Code 如何安装 nuget: https://blog.csdn.net/qq_36051316/article/details

微信公众平台自定义菜单及高级接口PHP SDK

别等时光非礼了梦想. 提交于 2020-04-03 04:26:43
SDK 源码: 1 /* 2 方倍工作室 http://www.cnblogs.com/txw1958/ 3 CopyRight 2014 www.doucube.com All Rights Reserved 4 */ 5 6 class class_weixin_adv 7 { 8 var $appid = ""; 9 var $appsecret = ""; 10 11 //构造函数,获取Access Token 12 public function __construct($appid = NULL, $appsecret = NULL) 13 { 14 if($appid){ 15 $this->appid = $appid; 16 } 17 if($appsecret){ 18 $this->appsecret = $appsecret; 19 } 20 21 //hardcode 22 $this->lasttime = 1395049256; 23 $this->access_token = "nRZvVpDU7LxcSi7GnG2LrUcmKbAECzRf0NyDBwKlng4nMPf88d34pkzdNcvhqm4clidLGAS18cN1RTSK60p49zIZY4aO13sF-eqsCs0xjlbad-lKVskk8T7gALQ5dIrgXbQQ