OpenID 和 OAuth 有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenID 和 OAuth 有啥区别相关的知识,希望对你有一定的参考价值。

OPENID:

为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID,可以在用户管理-获取用户基本信息(UnionID机制)文档了解详情。
OPENID是用户针对微信公众号的唯一识别码,相当于用户ID。通过这个ID我们就可以识别用户。

OAuth:

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
关于网页授权的两种scope的区别说明
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

具体而言,网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

所以,当用户访问第三方网页时,我们可以通过OAuth网页授权的方式获取到用户的OPENID,通过OPENID来进行一系列有关微信用户的功能操作。
参考技术A OpenID是Authentication
OAuth是Authorization

前者是网站对用户进行认证,让网站知道“你是你所声称的URL的属主”
后者其实并不包括认证,只不过“只有认证成功的人才能进行授权”,结果类似于“认证+授权”了。OAuth相当于:A网站给B网站一个令牌,然后告诉B网站说根据这个令牌你可以获取到某用户在A网站上允许你访问的所有信息

如果A网站需要用B网站的用户系统进行登录(学名好像叫federated login),它可以

选择OpenID认证,然后通过attribute exchange获取用户的昵称或其他通过OpenID暴露出来的用户属性,或者
选择OAuth认证,获取到token后再用token获取用户昵称或其他允许被访问的信息
参考技术B 1、OpenID是Authentication(证明;鉴定;证实),网站对用户进行认证,让网站知道“你是你所声称的URL的属主”
2、OAuth是Authorization(授权,认可;批准,委任),并不包括认证,只不过“只有认证成功的人才能进行授权”,结果类似于“认证+授权”了。OAuth相当于:A网站给B网站一个令牌,然后告诉B网站说根据这个令牌你可以获取到某用户在A网站上允许你访问的所有信息
参考技术C

    没什么关系

    OpenID 是一个以用户为中心的数字身份识别框架,它具有开放、分散性,如微信。

    OpenID 的创建基于这样一个概念:我们可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,我们也可以通过这种方式来作为用户的身份认证。由于URI 是整个网络世界的核心,它为基于URI的用户身份认证提供了广泛的、坚实的基础。

    OpenID 系统的第一部分是身份验证,即如何通过 URI 来认证用户身份。目前的网站都是依靠用户名和密码来登录认证,这就意味着大家在每个网站都需要注册用户名和密码,即便你使用的是同样的密码。如果使用 OpenID ,你的网站地址(URI)就是你的用户名,而你的密码安全的存储在一个 OpenID 服务网站上(你可以自己建立一个 OpenID 服务网站,也可以选择一个可信任的 OpenID 服务网站来完成注册)。

    OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。

参考技术D 春眠不觉晓,处处闻啼鸟.

OpenId 连接和 OAuth 2.0 密码授予 - 有啥区别?

【中文标题】OpenId 连接和 OAuth 2.0 密码授予 - 有啥区别?【英文标题】:OpenId connect and OAuth 2.0 password grant - what is the difference?OpenId 连接和 OAuth 2.0 密码授予 - 有什么区别? 【发布时间】:2021-02-26 19:15:31 【问题描述】:

我了解 OpenId 连接是建立在 OAuth 2.0 之上的用于身份验证的层。 OAuth2.0 基本上解决了授权问题,而 OpenId connect 在 OAuth2.0 之上构建了身份验证框架(通过显式 ID_token)。但是我对 OAuth 2.0 密码授权类型(我不是在询问其他授权类型,请注意)和 OpenId 连接之间的区别有点困惑。谁能解释一下?用例有什么不同吗?提前致谢。

【问题讨论】:

看到这个问题What's the difference between OpenID and OAuth?A 这不是我问的。我正在寻找 OAuth 授权类型(密码授权)和 OpenId 之间的确切区别。我了解 OAuth 和 OpenId 之间的区别。谢谢。 【参考方案1】:

此引用基于from here,它可能会对您有所帮助

众所周知,授权代码授予和隐式授予是典型的三足流程,包括客户端、授权服务器和用户之间的交互。虽然资源所有者密码凭据授予和客户端凭据授予是两条腿的,这意味着客户端使用预授权范围,因此无需与用户交互,无需在典型流程中执行其中一条腿。

【讨论】:

是的,这有帮助。我想现在我明白了.. 谢谢! 密码授予使用了两条腿的流程并且只获取访问令牌。我猜没有ID_token。在 OpenId Connect 中,ID_token 是必须的。这有区别吗?

以上是关于OpenID 和 OAuth 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

OpenID 和 SAML 有啥区别?

OpenId和OAuth区别

OAuth 2.0“状态”和OpenID“nonce”参数之间的区别?为啥状态不能被重用?

WS-Trust、OpenID 和 SAML Passive 之间有啥区别?

OpenID 与 OAuth [重复]

微信订阅号如何获得用户的openid