OpenID
OpenId是一个以用户为中心的数字身份识别框架,它具有开放、分散、自由等特性。OpenId的创建是基于这样一个概念:我们可以通过URI(或者URL网址)来识别一个网站。同样,我们也可以通过这样的方式来识别一个用户的身份。OpenId系统的身份认证就是通过URI来认证用户身份。目前绝大部分网站都是通过用户名与密码来登录认证用户身份,这就要求大家在每个你要使用的网站上注册一个帐号。如果使用OpenId,你可以在一个提供OpenId的网站上注册一个OpenId,以后你可以使用这个OpenId去登录支持OpenId的网站。这正是一处注册,到处使用的体现。

登录一个支持 OpenID 的网站非常简单(即便你是第一次访问这个网站也是一样)。只需要输入你注册好的 OpenID 用户名,然后你登录的网站会跳转到你的 OpenID 服务网站,在你的 OpenID 服务网站输入密码(或者其它需要填写的信息)验证通过后,你会回到登录的网站并且已经成功登录。 OpenID 系统可以应用于所有需要身份验证的地方,既可以应用于单点登录系统,也可以用于共享敏感数据时的身份认证。
除了一处注册到处通行以外,OpenID 给所有支持 OpenID 的网站带来了价值--共享用户资源。用户可以清楚的控制哪些信息可以被共享,例如姓名、地址、电话号码等。今天,OpenID 作为以用户为中心的身份验证系统已经为数百万的用户提供了服务。
二、OpenID相关术语
- End User:终端用户,使用OP与RP的服务
- Relying Party依赖方:简称RP,服务提供者,需要OP鉴权终端用户的身份
- OpenID Provider:OpenID提供者,简称OP,对用户身份鉴权
- Identifier标识符:标识符可以是一个HTTP、HTTPS或者XRI(可扩展的资源标识)
- User-Agent:实现了HTTP1.1协议的用户浏览器
- OP Endpoint URL:OP鉴权的URL,提供给RP使用
- OP Identifier:OP提供给终端用户的一个URI或者XRI,RP根据OP Identifier来解析出OP Endpoint URL与OP Version
- User-Supplied Identifier:终端用户使用的ID,可能是OP提供的OpenID,也可以是在RP注册的ID。RP可以根据User-Supplied Identifier来解析出OP Endpoint URL、OP Version与OP_Local Identifer
- Claimed Identifier:终端用户声明自己身份的一个标志,可以是一个URI或者XRI
- OP-Local Identifier:OP提供的局部ID
三、OpenID验证流程

- 终端用户请求登录RP网站,用户选择了以OpenID方式来登录
- RP将OpenId的登录界面返回给终端用户
- 终端用户以OpenID登陆RP网站
- RP网站对用户的OpenID进行标准化,此过程非常负责。由于OpenID可能是URI,也可能是XRI,所以标准化方式各不相同。具体标准化过程是:如果OpenID以xri://、xri://$ip或者xri://$dns开头,先去掉这些符号;然后对如下的字符串进行判断,如果第一个字符是=、@、+、$、!,则视为标准的XRI,否则视为HTTP URL(若没有http,为其增加http://)。
- RP发现OP,如果OpenId是XRI,就采用XRI解析,如果是URL,则用Yadis协议解析,若Yadis解析失败,则用Http发现。
- RP跟OP建立一个关联。两者之间可以建立一个安全通道,用于传输信息并降低交互次数。
- OP处理RP的关联请求
- RP请求OP对用户身份进行鉴权
- OP对用户鉴权,请求用户进行登录认证
- 用户登录OP
- OP将鉴权结果返回给RP
- RP对OP的结果进行分析
OpenID的更多相关文章
- IdentityServer4 使用OpenID Connect添加用户身份验证
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...
- PHP代码 如何网页获取用户的openid
public function getOpenid($appid, $appsecret) { $SERVER_NAME = $_SERVER['SERVER_NAME']; $REQUEST_URI ...
- 微信开发笔记:获取用户openid,以及用户头像昵称等信息
微信开发的时候有一个很便利的途径来进行一个用户的一步注册登录,就是使用用户的微信信息来直接进行登陆,可以省去很多不必要的麻烦.那具体这些信息是如何来获取的呢? 首先呢,我们需要对微信进行一个授权,让微 ...
- 微信——获取用户基本信息及openid 、access_token、code
获取用户信息,需要获取 access_token.openid 然后调用接口https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCES ...
- .NET开源OpenID和OAuth解决方案Thinktecture IdentityServer
现代的应用程序看起来像这样: 典型的交互操作包括: 浏览器与 web 应用程序进行通信 Web 应用程序与 web Api (有时是在他们自己的有时代表用户) 通信 基于浏览器的应用程序与 web A ...
- 微信接口-获取用户openid基本信息
一.协助获取微信用户openid功能 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri= ...
- 获取openid 的步骤
1.引导客户打开 https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid &redirect_uri=https://w ...
- IdentityServer4 简单使用,包括api访问控制,openid的授权登录,js访问
写在前面 先分享一首数摇:http://music.163.com/m/song?id=36089751&userid=52749763 其次是:对于identityServer理解并不是特别 ...
随机推荐
- Codeforces Round #525 (Div. 2)-A/B/C/E
http://codeforces.com/contest/1088/problem/A 暴力一波就好了. //题解有O(1)做法是 (n-n%2,2) #include<iostream> ...
- 非常不错的地区三级联动,js简单易懂。封装起来了
首先需要引入area.js,然后配置并初始化插件: 例: <!-- 绑定银行卡开始 --> <script src="js/area.js"></sc ...
- Utils--字符串的帮助类
Utils--字符串的帮助类 一个关于字符串过滤的工具类,主要时针对username和password的过滤 package com.bw.yun.utils; import java.securit ...
- 用SQL命令手工创建CDB
1.设置环境变量 $ export ORACLE_SID=ora12c $ export ORACLE_HOME=/home/oracle/product/12.1.0/db1 $ export ...
- mfscli的使用方法(解决mfscgi响应慢的问题)
在moosefs中,mfscgi是一个python写的server程序,其中的数据是调用同样的python工具mfscli实现的. 每当用浏览器打开mfscgi的时候,它要把所有的表数据请求一遍,非常 ...
- 反向代理/负载均衡/session/cookie
正向代理:客户端将流量重定向到burpsuite等软件或连接到VPN再访问服务器而不是直接访问服务器的场景.流量流动方向是真正机器--代理服务器.正向代理又称代理.普通代理. 反向代理:服务器端使用反 ...
- System.gc()和-XX:+DisableExplicitGC启动参数,以及DirectByteBuffer的内存释放
首先我们修改下JVM的启动参数,重新运行之前博客中的代码.JVM启动参数和测试代码如下: -verbose:gc -XX:+PrintGCDetails -XX:+DisableExplicitGC ...
- Latex 循环插图、文件名包含空格
\,...,} { \begin{figure} \centering \includegraphics[width=10cm]{pictures//rela\n} \caption{Attribut ...
- laravel中db获取某个数据的具体字段值:
$helpfriend = DB::connection('luckyrecord')->table($luckyrecord)->where('id', $luckyrecordid)- ...
- mips编译器交叉编译openssl
1.下载源码: git clone https://github.com/openssl/openssl.git 2. 配置生成Makefile ./config no-asm shared --p ...