Blazor Wasm 身份验证和授权之 OpenID 与 OAuth2
目录:
- OpenID 与 OAuth2 基础知识
- Blazor wasm Google 登录
- Blazor wasm Gitee 码云登录
- Blazor wasm GitHub 登录
- Blazor wasm Facebook 登录
- Blazor IdentityServer 部署到服务器
- Blazor wasm OIDC 单点登录 (IDS)
源码
相关基础知识
OpenID 与 OAuth2
参考阅读
https://auth0.com/docs/authenticate/protocols/openid-connect-protocol#what-is-openid-connect-oidc-
OpenID 连接协议
什么是 OpenID Connect (OIDC)?
OpenID Connect (OIDC) 是构建在OAuth 2.0框架之上的身份层。它允许第三方应用程序验证最终用户的身份并获取基本的用户配置文件信息。OIDC 使用JSON Web 令牌(JWT),您可以使用符合 OAuth 2.0 规范的流获取该令牌。看看我们的
OIDC 手册
更多细节。
OpenID 与 OAuth2
OAuth 2.0 涉及资源访问和共享,而 OIDC 涉及用户身份验证。其目的是让您一次登录多个站点。每次您需要使用 OIDC 登录网站时,您都会被重定向到您登录的 OpenID 站点,然后返回到该网站。例如,如果您选择使用 Google 帐户登录 Auth0,则您使用的是 OIDC。一旦您成功通过 Google 进行身份验证并授权 Auth0 访问您的信息,Google 就会将有关用户和所执行的身份验证的信息发送回 Auth0。此信息以 JWT 返回。您将收到一个访问令牌,如果需要,还会收到一个ID 令牌。
OpenID 和 JWT
JWT 包含索赔,它们是有关实体(通常是用户)和其他元数据的语句(例如姓名或电子邮件地址)。这
OpenID 连接规范定义了一组标准声明。该组标准声明包括姓名、电子邮件、性别、出生日期等。但是,如果您想要捕获有关用户的信息,并且当前没有最能反映此信息的标准声明,您可以创建自定义声明并将其添加到您的令牌中。
使用 OIDC 和 OAuth2 配置应用程序
您可以自动使用 OIDC 发现配置您的应用程序。
Auth0 中的应用程序
Auth0 中的术语“
应用程序
”或“app”并不暗示任何特定的实现特征。例如,它可以是在移动设备上执行的本机应用程序、在浏览器上执行的单页应用程序或在服务器上执行的常规 Web 应用程序。
Auth0 根据以下特征对应用程序进行分类:
应用程序类型
:要向您的应用程序添加身份验证,您必须在Auth0 仪表板中注册它并从以下应用程序类型之一中进行选择:
常规 Web 应用程序
:在服务器上执行大部分应用程序逻辑的传统 Web 应用程序(例如 Express.js 或 ASP.NET)。单页 Web 应用程序 (SPA)
:在 Web 浏览器中执行大部分用户界面逻辑的 JavaScript 应用程序,主要使用 API(例如 AngularJS + Node.js 或 React)与 Web 服务器通信。本机应用程序
:在设备(例如 iOS 或 Android)上本机运行的移动或桌面应用程序。机器对机器 (M2M) 应用程序
:非交互式应用程序,例如命令行工具、守护程序、物联网设备或在后端运行的服务。通常,如果您有需要访问 API 的服务,则可以使用此选项。
凭证安全
:根据OAuth 2.0 规范,应用程序可以分为公共或机密;机密应用程序可以安全地保存凭据,而公共应用程序则不能。
所有权
:应用程序是否被归类为第一方或第三方取决于应用程序的所有权和控制权。第一方应用程序由拥有 Auth0 域的同一组织或个人控制。第三方应用程序使外部各方或合作伙伴能够安全地访问 API 背后的受保护资源。
单点登录
当用户登录到一个应用程序,然后自动登录到其他应用程序时,就会发生单点登录(SSO),无论用户使用的平台、技术或域如何。用户仅登录一次,因此该功能被称为“单点登录”。
例如,如果您登录 Gmail 等 Google 服务,您将自动通过 YouTube、AdSense、Google Analytics 和其他 Google 应用程序的身份验证。同样,如果您退出 Gmail 或其他 Google 应用程序,您也会自动退出所有应用程序;这称为单点注销。
SSO 在使用您的应用程序和服务时为用户提供无缝体验。用户无需记住每个应用程序或服务的单独凭据集,只需登录一次即可访问全套应用程序。
每当用户访问需要身份验证的域时,他们都会被重定向到可能要求登录的身份验证域。如果用户已经在该身份验证域登录,则可以立即重定向到原始域,而无需登录再次。
首次登录时 SSO
对于使用 Auth0 的 SSO,中央服务是 Auth0授权服务器。
让我们看一下用户首次登录时的 SSO 流程示例:
您的应用程序将用户重定向到登录页面。
Auth0 检查是否存在现有的 SSO cookie。
由于这是用户第一次访问登录页面并且不存在 SSO cookie,因此系统将要求用户使用您已配置的连接之一进行登录。
用户登录后,Auth0 将设置一个 SSO cookie 并将用户重定向到您的应用程序,返回一个包含用户身份信息的 ID 令牌。
后续登录时进行 SSO
让我们看一下用户再次访问您的网站时的 SSO 流程示例:
您的应用程序将用户重定向到登录页面。
Auth0 检查是否存在现有的 SSO cookie。
Auth0 找到 SSO cookie,并在必要时更新它。不显示登录屏幕。
Auth0 将用户重定向到您的应用程序,返回包含用户身份信息的 ID 令牌。
OpenID 连接
OpenID Connect (OIDC) 是一种常用于面向消费者的 SSO 实现的身份验证协议。OIDC 协议通过JSON Web 令牌和中央身份提供商处理身份验证。
与 OIDC 合作:
用户请求访问应用程序。
应用程序将用户重定向到身份提供商以进行身份验证。
身份提供者验证用户,如果成功,则提示用户授予对应用程序的数据访问权限。
如果授予访问权限,身份提供者将生成一个 ID 令牌,其中包含应用程序可以使用的用户身份信息。
身份提供者将用户返回到应用程序。