OpenID 说明

OpenID 是一种去中心化的身份认证系统,建置简便,甚至不需要一个帐号管理中心伺服器。在OpenID 中的使用案例中,参与者分成三种,即:

  • End-user - 最终使用者,即服务的一般用户,每一个用户都使用一个URL 来代表自己。
  • Identity provider - 身份提供者。身份登录与验证的服务提供者。
  • Relying party - 委托者,向Identity provider 请求验证身份的参与者。通常是其他的服务提供者。

除了 ​​身份的辩证外,OpenID也规范了委托者可以透过 OpenID Simple Registration Extension 1.0向身份提供者查询使用者的基本资讯。Simple Registration Extension指定了部份栏位的用途,例如:

  • openid.sreg.nickname: Any UTF-8 string that the End User wants to use as a nickname.
  • openid.sreg.email: The email address of the End User as specified in section 3.4.1 of [RFC2822] (Resnick, P., “Internet Message Format,” .).
  • openid.sreg.fullname: UTF-8 string free text representation of the End User's full name.
  • openid.sreg.language: End User's preferred language as specified by ISO639.

更多的栏位用途请参考 OpenID Simple Registration Extension 1.0

OpenID 的三方交涉概念

OpenID 协定规范了代表最终使用者的agent (例如Web浏览器)与身份提供者和委托者交涉的内容, agent 藉由Cookie 保存认证状态。凭此状态,agent 可以存取其他的服务资源,而无需使用者再次输入密码。

例如mydomain.com 是身份提供者(Identity provider)。rock 在mydomain.com 登录了他的身份,则rock 可以用http://mydomain.com/rock 这个URL 代表他。接着rock 想要使用Gmail 服务,就以http://mydomain.com/rock 签入Gmail ,此时Gmail 就是委托者(Relying party) 。Gmail 会从代表rock 的URL 中,找出这个身份的提供者是mydomain.com ,接着就依OpenID 规范的交涉协定验证rock 是否已经登入了。

如果rock 事先已经在mydomain.com 完成登入动作,那么Gmail 就会得到rock 已登入的回应,rock 就不需要再次输入帐号和密码。反之若rock 尚未在任何地方登入,那么Gmail 的页面就要导向到mydomain.com 的登入页面去,让rock 完成登入动作。将使用者导向到登入页面的动作,是OpenID 协定的交涉动作之一

The OpenID Authentication Process The OpenID Authentication Process

本图取自「 Google is Now an OpenID Provider 」。

OpenID 实作品

基本上,委托者是根据代表身份的URL 判断身份提供者是谁。例如URL 是http://mydomain.com/rock , 则身份提供者就是mydomain.com 。委托者可以直接根据ID 找到身份提供者要求验证。因此,在一般情形下,OpenID 系统不需要所谓的身份认证中心伺服器。甚至于,一个最终使用者可以自己当自己的身份提供者。

例如rock 架设了个人主机rock.idv.tw ,启动了Identity provider 的服务。那么rock 就可以用http://rock.idv.tw/ 代表他自己。当有人(任何人)以http://rock.idv.tw/ 这个URL 向任何一个支援OpenID 的网路伺服要求服务时,那些服务者就要向rock.idv.tw 验证身份。

Niemira的phpMyID用了1800行的PHP code实作了一个单一帐号的身份提供者软体。使用者仅须在自己的主机上安装此程式,就可以做自己的身份提供者。

 Yahoo! OpenID Usability Research文章中,补充了许多关于使用者体验改善的事项,可以让软体系统支援OpenID功能时,对使用者更为友善。

OpenID 已经有相当多的实作品,包含Libraries/API 在内。这些Libraries 可以提供编程人员在软体中实现Identity provider 、Relying party 功能。

OpenID Foundation提供了一份Libraries清单:Libraries

  • dyuproject - java REST framework, openid 2.0 relying party, oauth consumer and service provider, JSON IOC.
  • JOID - JOID lets you create both OpenID 2.0 relying parties and identity providers.
  • WSO2 Identity Server - WSO2 Identity Server is an open source identity and entitlement management server having Information Cards, OpenID and XACML support.
References
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 后端获取 openID 是指在 Java 后端代码中获取用户微信公众号或小程序的 openID,以便后续进行用户信息的判断和业务逻辑的处理。下面我们一起看看具体的实现过程。 1. 授权获取 code 用户在微信公众号或小程序中点击登录按钮后,会跳转到微信的授权页面。我们需要在 Java 后端代码中,通过构造微信授权链接,将用户引导到该页面。 授权链接示例:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 参数说明: - appid:微信公众号或小程序的 appid - redirect_uri:回调地址,即用户在授权后跳转的链接 - response_type:授权类型,固定填写 code - scope:授权范围,snsapi_base 表示只获取用户的 openID - state:用于登录验证等操作,可以为空 - #wechat_redirect:固定的参数,表示要进行授权操作 2. 获取 access_token 获取 code 后,我们需要在 Java 后端代码中使用该 code 去换取 access_token,从而获取用户的 openID。 获取 access_token 的请求示例:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 参数说明: - appid:微信公众号或小程序的 appid - secret:应用的 app secret,推荐通过配置文件等方式进行安全保护 - code:授权码,即用户同意授权后获取到的 code - grant_type:固定填写 authorization_code 3. 解析 openID 获取 access_token 后,我们就可以通过 API 获取用户的基本信息,其中包括用户的 openID。 通过 access_token 获取用户信息的请求示例:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 参数说明: - access_token:获取到的访问令牌 - openid:用户的 openID - lang:语言版本,可为空,zh_CN 表示简体中文 以上就是 Java 后端获取 openID 的详细操作流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值