工作中经常听到关于 OAuth2 的讨论,但很难用只言片语将这一整套体系解释清楚。本文希望通过查阅资料和开发实践,阐明 OAuth2、OIDC 和 IdentityServer4 三者关于 what、why、和 how 的问题。
假设有一个这样的需求: 客户端程序需要访问资源服务器的 API,又不希望每次访问都带上用户名密码做一次认证。面对这样的需求,不同的开发人员有自己的考虑,可能的实现多种多样。在经过长期沉淀和提炼之后,先驱们总结出了在不同场景下「委托授权」的最佳实践,然后为这一套最佳实践制定出一套规范 - OAuth。
OAuth 标准化了「委托授权」涉及的各个参与方、数据和 EndPoint,其目的在于为实现者提供一套统一的参考标准。由于时代原因,OAuth 1.0 已经不适合现代 Web 技术的使用场景,所以本文中谈到的 OAuth 均指 OAuth 2.0。OAuth 先于 OIDC 诞生,两者均为规范(Specifications),OAuth 对应 RFC6749,OIDC 对应 OpenID Connect Core 1.0 incorporating errata set 1,而 IdentityServer4 为 OIDC 在 .NET 平台 官方授权的实现类库。
OIDC是一个OAuth2上层的简单身份层协议。它允许客户端验证用户的身份并获取基本的用户配置信息。OIDC使用JSON Web Token(JWT)作为信息返回,通过符合OAuth2的流程来获取。例如,如果选择使用Google帐户登录Auth0,这就使用了OIDC。成功通过Google身份验证并授权Auth0访问您的信息后,Google会将有关用户和执行的身份验证的信息发送回Auth0。此信息在JWT中返回,包含ID Token或者Access Token。
JWT包含Claims,它们是有关实体(通常是用户)的Claims(例如名称或电子邮件地址)和其他元数据。OIDC规范定义了一组标准的权利要求。这组标准声明包括姓名,电子邮件,性别,出生日期等。但是,如果要获取有关用户的信息,并且当前没有最能反映此信息的标准声明,则可以创建自定义声明并将其添加到令牌中。
OAuth 2.0 和 OpenID Connect https://blog.frosthe.net/security-oauth2-and-openid-connect/
OIDC详细流程 https://linianhui.github.io/oidc-in-action/01-oidc-sso/#oidc-client-trigger-authentication-request
本文链接:https://blog.nnwk.net/article/80
有问题请留言。版权所有,转载请在显眼位置处保留文章出处,并留下原文连接
Leave your question and I'll get back to you as soon as I see it. All rights reserved. Please keep the source and links
友情链接:
子卿全栈
全部评论