⑴ 用户openid是否唯一
是唯一的,应该是微信自己经过了一个什么算法返回给我们的
⑵ ID Token - JWT
我们来继续前两章( OAuth2 总结 , 对OpenID Connect的理解 )的讨论,进入对JWT的理解。先来简单回顾一下OAuth2和OpenID:
OpenID建立在OAuth之上,完成了认证和授权。而认证和授权的结果就体现在这个ID token之上,而这个ID token通常会是JWT。那么为什么会是JWT呢?我们通过以下几点来逐一解释。
JWT RFC 7519 给出了官方定义的一些字段:
当然也不限于此,可以根据自己的需要,添加其他字段。到此,我们可以看出JWT提供了ID token所需要的能力。一个完整的JTW是由三部分组成:Header,Payload,Signature。三者之间由 . 隔开,刚才提到的认证授权的字段就存在于Payload中。
Header中存放的是JTW的元数据,包含签名的算法以及token的类型,如下所示:
Signature部分是对前两部分的签名, 防止数据篡改 。首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。
算出签名以后,把 Header、Payload、Signature三个部分经过base64序列化为三个字符串,再讲三个字符串由 . 为间隔拼接成一个字符串返回给客户端。
ID Token需要有足够的安全性,JWT是如何做到的呢?
刚看到了签名部分,签名的作用只是为了防止数据篡改,而JWT默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。比如认证服务器中使用私钥进行加密,把公钥分发给其他应用服务器,应用服务拿到加密后的token后用公钥解密,获取到JWT,再用签名的秘钥来验证数据是否经过的篡改。
我们来看看还有神马其他备选么?Simple Web Tokens (SWT)和Security Assertion Markup Language Tokens (SAML)。
JWT vs SAML:JWT基于json,而SAML基于XML,在大小上就有足够的优势,更适用于HTML和HTTP。
JWT vs SWT:在安全性上,SWT只支持对称加密,而JWT和SAML支持公私钥的加密方式。
作为一个mobile developer,也想在这里对比一下原先的简单token模式和SSO中的JWT:
在没有该机制前,我们通常会使用一个随机产生的字符串作为token,认证成功后返回给前端,之后前端的每个请求带上这个token。若后台服务的是个单体应用没有什么问题,请求来了,验证一下token是否有效即可,但当认证服务和其他的应用服务是分离的,怎么做呢?应用服务受到请求,再向认证服务发起一个请求来验证验证token是否合法,是否有权限访问该应用服务。这样做到没有什么问题,只是当服务变多时,比如微服务下,势必会造成认证服务器的压力过大。
在使用该机制后,客户端通过认证服务登录,获得这个JWT,之后其他应用服务自身便可以验证这个token的是否有效,是否有权访问。
看似完美,但也有它自身的问题,我们来看一个场景:权限变更。某用户原先是一个超级管理员,可以访问所有服务,并可进行任意的删除,更改操作,他在这个状态下拿到了JWT。随后,由于权限更改为普通管理员,便不应该具有所有权限,但此时他开始时的JWT被缓存在客户端仍然可用,其他应用服务也并无法知道这个用户的权限已经被更改,后果可想而知了。解决的方式无非是将这个token的有效时间设置的短一些。
⑶ 如何登录自己的小程序
1.微信小程序端发起请求并携带主要参数;
2.java后台接收到登录请求后,根据临时凭证code去调用微信接口获取用户唯一标识openId和sessionKey;
3.使用openId去查询数据库(openId是会员的的唯一标识)
a.若openId存在,直接登录成功;
b.若openId’不存在,我们把openId写入到数据库,并且让他登录
4.根据openId查询redis数据库,判断openId对应的skey是否存在,如果存在删除原来的老skey以及对应的openId和sessionKey(为了安全,保证每次登录的key都是最新的)
5.通过uuid生成唯一的skey,用openId做键,skey做值,存入到redis中
6.然后把skey做键,openId和sessionKey的json串做值也重新存入到redis中
7.根据解密算法,参数有encryptedData、sessionKey和iv,获取用户信息userInfo,如果userInfo字段不满足需要,可通过userInfo.put( “balance”,user.getUbalance() );添加所需要的字段和值
8.将微信小程序需要的数据封装到map容器中,返回给小程序端
⑷ 联想之星刘维:为什么我不投模式型项目
本期和我们对谈的VC是联想之星投资总监刘维,刘维主要负责TMT领域的天使投资。联想之星系联想旗下的科技创业孵化器。联想之星在投资上有一个“数据轴”理论,能不能跟我们具体说说呢? 刘维:这么说吧,我觉得业内很多人投的还是模式型的项目比较多, 美国有什么东西比较火, 国内有几个人就做了它了。从投资的角度来讲,这些项目可能看着比较顺眼,但是在那个时间点,你也看不出来多不错,所以后面就是一个赌概率的游戏。 从联想之星的角度来讲,我们更多的还是去找一个“轴长”。这个“轴长”一定是在投资的始点上看,它某种积累已经比较丰富,这种积累有可能像十多年前我们投的科大讯飞也好,现在的Face++或者人机对话这些公司,它过往的技术积累往往是比较深厚的。而它当前还没有被很好地装到产品里,或者它的商业模式还不够好,所以它没有散发出特别大的市场价值,但是它这个轴不是别人一下可以追上的。所以投这些项目,一是市场上有了更充裕的时间,另一个就是说有利于新的产业。那这些公司数据轴很长,战线很长,会不会因为这个遇到什么困难? 刘维:联想有句话叫“退出画面看画”,行业的近期问题当然需要讨论,但退得远一点,很多公司其实还有很多战略机会,我到底应该怎么去认识我这个市场,我应该怎么做这件事,我做游戏开发的是不是应该不去做发行,把这块砍掉。但退得远一些,推出这个行业当前的用户数,看看这个公司,战略结构,怎么把价值做大,重新梳理它的商业模式。 其实你回头看我们当年投的科大讯飞,它一直坚持它的目标:当年想做语音,这么多年它也一直坚持下来了,不像很多公司,中间做自动集成什么的就做其它的业务去了。但其实它也分阶段实现目标嘛,如果说它从一开始就一定要做现在的这些讯飞语音、语音云这样的互联网云产品,肯定做不到。因为你的技术、你的边界条件、你的市场都做不到。所以它从很早的时候就规划了这条路径,先做合成、再做识别。合成上来讲,我们先做怎么去给电信运营商来提供这些产品,再怎么去做独立的产品。你们通常怎么帮助这些企业去规划路径呢? 刘维:我们有一种方法论是“目的性极强”。联想挺强调逻辑,但强调逻辑并不是说有洞察力——今天就能判断好我做什么一定是对的。你的规划可能还是错的,但你至少定了规划。 从目的的角度来讲,就是我觉得现在市场格局是什么,我为什么要做这么一件事,来解决我对这个市场格局的认知。然后规划这个事该怎么做,一步一步分解下来。这个东西也许在过程中会不断的调整,也许最后会被认为是错的,但错了没关系,至少你长本事了。 你回头去看的时候,会想是我当年判断用户需求错了,还是我决定以什么产品适应什么需求这个匹配错了,还是我怎么去做产品做错了,我对哪个边界条件判断错了。你下次再决策的时候,肯定就能提高。所以我觉得目的性极强,对发展到一定程度的企业,会对他们是一种启发。如何去培养目的性? 刘维:还是从思想方法上来讲,把它当成你思考问题的中心吧。需要足够的重视,而不是说把目的性写下来,一共有哪几个,这样很容易扣不住。如果说一切的工作都是围绕一个核心目的来拆解,比如 36kr 说我们的目的是今年要创建一个很好的创业者服务平台,那这个平台就包括你怎么去提供给创业者的功能,怎么去聚拢创业者,怎么去做适当的宣传和合纵连横,所以这个东西是层层扣紧的。这和今天我们说第一要提高 36kr 的影响力,第二要让读者满意,是不一样的。这些目的可能永远是对的,但不是很有可辩论空间,它是很确定的这样的一个目的。那你们投讯飞和Face++这样的企业,最终的目的性是什么? 刘维:我们投资这些公司的愿景,可能就是两种层面:高和低。这些公司现在看起来都是通过技术平台来入手,那他们至少能做到的事是帮助很多 app、很多人增加、改善体验,比如说能画能做得更好、人脸识别能控制得更好,增加体验之后呢,能获得自己收入、积累起盈利的可能。比如做安全认证的,可以去做 OpenID 体系,做语义理解的,返回结果的时候可以夹杂至少是你推荐、提供来源的东西,所以它是短期内能实现商业价值。它们最后被大公司买走也好,或者成为像科大讯飞一样赚钱的公司,都是有可能的。但这是一种低的、保守的方案。更为积极的方案,我们当然是希望他们能成为入口级别的厂商。您最近比较关注哪些领域? 刘维:“数据轴”还是持续会比较关注的一个领域,虽然我们已经投了这么多了,但还是会有不断的机会,比如刚刚说的Face++,人脸识别下一步也有聚焦,比如它下一步会聚焦到更偏表情,还是更偏识别、更聚焦 3D 人脸。别的一些项目我们还是会关注。因为这里头有一个大背景是,云技术的发展,大大改变了这件事的可行性,原来像科大讯飞这些公司,它得磨个五年十年花几个亿的钱,可能才能把一些参数去人工地调到规则算法,那现在云的发展使得这个速度大大地加快。 另一类来说,我们也会关注to B业务这一块的机会。我自己其实最早是做 to B 业务出身的,但是过去这些年,我一直觉得中国不太存在这样的机会,就是让它像 salesforce 互联网公司这样爆发性地增长。因为中国整体的环境决定,大部分的企业在采购的时候重重黑幕,它买一个软件、买一个 IT 的服务,根本不在乎效率。 过去几年渐渐有些小企业成长起来了,但 2000 年之后的这一波小企业呢,最大的问题在于缺乏品味,就是它是有诉求啦,老板说我都是自己的钱啊,没有什么黑幕,但是呢,我要买个 ERP,我也不知道什么好,拿到了我也不会用。这种情况就不太适合互联网,不是说“我是产品好,一开始可以免费用,用多了再去扩展”。但这一两年又发生了很多改变,比如说电商,电商很多企业其实是既有诉求又有品味的。因为他们每天赚的就是通过配置 IP 参数,通过数字化去把生意做好的人。他们对于很多 CRM 的东西,很多企业软件的东西,越来越懂。那么为哪些领域服务的公司最有可能成为SAAS? 刘维:比如电商,比如零售。零售就在于市场上的中小企业比较多,这么说吧,石油行业肯定不适合。当然我说的小企业是相对高端一点的,有点连锁性质的零售。它的竞争者很多,而且它的竞争就是数据的竞争,对于这样的企业来讲,你让它花点钱、花点代价去做这件事,它很愿意。因为它有这个刚需。 我自己有句话叫“融化的冰山”,中国企业市场这块冰山这两年开始在融化,我们这块其实比美国落后了十几年,我们 to C 业务就好很多。所以 to B 这块现在在加速追赶,加速融化,很有机会。您觉得这几年中国那些不太有品位的企业在慢慢改变的社会背景是什么? 刘维:一个是温饱解决了,大家的品味还是在渐渐提高嘛。另一个,其实是另一种意义上的“C to B”,或者说“C推B”。有时候企业的品味提高得慢,但企业里的人的品味提高的快。你看中国现在 to C 产品最活跃,一点都不比美国差,美国到三四线城市,很多东西根本没人用。而在中国不一样,现在很多二三线城市,大家玩得东西也挺潮流的,这个实际上是在提高品位。其实现在 360 和腾讯都同样面对这个问题,不是说我什么东西抄一下就行,一些细节做不好用户就不买单。为什么?其实就是用户品位提高了。所以我觉得中国会有很多这样的机会吧。
⑸ openld是什么意思
OpenID 是一个以用户为中心的数字身份识别框架,它具有开放、分散性。OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,也可以通过这种方式来作为用户的身份认证。
OpenID 系统的第一部分是身份验证,即如何通过URI来认证用户身份。目前的网站都是依靠用户名和密码来登录认证,这就意味着大家在每个网站都需要注册用户名和密码,即便你使用的是同样的密码。
(5)openid算法扩展阅读
口令方式:
当自己每天访问自己的电子邮件服务器、利用Telnet登录大学或公司的计算机或者访问互联网上诸如E*Trade的订阅服务时都在使用口令。服务器要采用用户名与口令对用户进行认证的话,就必须维护合法用户的用户名与口令的数据库。
口令的选择应满足的几个原则:
1、容易记忆;不易猜中;不易分析。
2、口令管理可通过单项函数来解决,即计算机不存储口令,只存储口令的单项函数,其识别过程如下:
1)用户将口令传送给计算机;
2) 计算机完成口令单向函数值的计算。
3)计算机把单向函数值和机器存储值比较。
许多WWW服务器系统都用固定格式的文件来存储用户名和口令,避免专门建立一个数据库系统来仅仅存储用户名或口令。对大的商务网站来说,不可能将用户名和口令存储在固定格式文件中。
这些大网站一般会用工业级的数据库来存储商品目录,而用同样的数据库来存储用户名和口令就很有意义了。否则,成千上万的顾客要同时登录会带来很大的延迟。
不管将登录信息存储在何处。最常见也是最安全的存储方法(UNIX系统采用的方法)是以明文形式保存用户名,而用加密方式来保存口令。在系统创建一组新的用户名/口令时,一般采用单向加密算法对口令进行加密(同前面讲述的消息摘要算法一样)。
在明文的用户名和加密的口令方式下,当用户登录时,系统根据数据库中所存储的用户名清单来检查用户名以验证用户的合法身法。对登录系统时用户所输入的口令进行加密,系统将用户口令的加密结果同数据库中所存储的加密口令进行比较。
如果指定用户的两种加密口令相互匹配,就接受登录。这就是UNIX操作系统上即使系统管理员也无法找到被遗忘口令的原因。这时,管理员会给你一个新的临时口令,然后你可改成自己选定的口令。
要知道口令是不安全的。有的网站将用户名/口令以Cookie形式存在客户机上,以方便用户以后再访问网站时不用再输入用户名/口令就能直接登录了。
Cookie存在的问题是信息是以明文形式存在客户机上,如果Cookie内含登录和口令信息,任何想访问存储在客户机上Cookie人都能看到这些信息。