浏览应用服务中的身份验证和授权
Azure 应用服务提供内置的身份验证和授权支持。 在 Web 应用、RESTful API、移动后端或 Azure Functions 中,只需编写最少量代码或无需不编写代码即可登录用户和访问数据。
为何使用内置身份验证?
无需使用应用服务进行身份验证和授权。 许多 Web 框架绑定了安全功能,你可以根据需要使用不同的功能。 如果所需的灵活性超出了应用服务能够提供的范畴,还可以编写自己的实用工具。
适用于应用服务和 Azure Functions 的内置身份验证功能通过联合标识提供者提供现成的身份验证,可为你节省时间和精力,使你能够专注于应用程序的其余部分。
- 借助 Azure 应用服务,可以将各种身份验证功能集成到 Web 应用或 API 中,而无需你自行实现。
- 身份验证直接内置于平台中,无需使用任何特定语言、SDK、安全专业知识或代码。
- 可与多个登录提供商集成。 例如,Microsoft Entra ID、Facebook、Google、X。
标识提供者
应用服务使用联合标识,在其中,第三方标识提供者会为你管理用户标识和身份验证流。 默认提供以下五个标识提供者:
提供程序 | 登录终结点 | 操作说明指南 |
---|---|---|
Microsoft 标识平台 | /.auth/login/aad |
应用服务 Microsoft 标识平台登录 |
/.auth/login/facebook |
应用服务 Facebook 登录 | |
/.auth/login/google |
应用服务 Google 登录 | |
X | /.auth/login/twitter |
应用服务 X 登录 |
任何 OpenID Connect 提供程序 | /.auth/login/<providerName> |
应用服务 OpenID Connect 登录 |
GitHub | /.auth/login/github |
应用服务 GitHub 登录 |
对其中一个提供程序启用身份验证和授权时,其登录终结点可用于用户身份验证,以及验证来自提供程序的身份验证令牌。 你可以轻松为用户提供任意数量的登录选项。
工作原理
身份验证和授权模块在应用程序代码所在的同一沙盒中运行。 启用后,每个传入的 HTTP 请求都要经过它,然后再传递到应用程序代码。 此模块为应用处理多项操作:
- 使用指定的标识提供者对用户和客户端进行身份验证
- 验证、存储和刷新由已配置的标识提供程序颁发的 OAuth 令牌
- 管理经过身份验证的会话
- 将标识信息插入 HTTP 请求标头
该模块独立于应用程序代码运行,并且可以使用 Azure 资源管理器设置或使用配置文件进行配置。 不需要任何 SDK、特定编程语言,或者对应用程序代码进行更改。
注意
在 Linux 和容器中,身份验证和授权模块在独立于应用程序代码的单独容器中运行。 因为它不是在进程内运行,所以不可能直接与特定的语言框架集成。
身份验证流
身份验证流对于所有提供程序是相同的,但根据是否要使用提供程序的 SDK 登录而有所差别。
不使用提供程序 SDK:应用程序向应用服务委托联合登录。 此类委派通常适用于浏览器应用程序,它可以向用户显示提供者的登录页面。 服务器代码管理登录过程时,被称为服务器定向流或服务器流。
使用提供程序 SDK:应用程序手动将用户登录到提供程序,然后将身份验证令牌提交给应用服务进行验证。 无浏览器应用通常采用此方案,这可以防止向用户显示提供程序的登录页。 应用程序代码管理登录过程时,被称为“客户端导向流”或“客户端流”。 这适用于 REST API、Azure Functions、JavaScript 浏览器客户端,以及使用提供商 SDK 登录用户的本机移动应用。
下表说明了身份验证流的步骤。
步骤 | 不使用提供程序 SDK | 使用提供程序 SDK |
---|---|---|
将用户登录 | 将客户端重定向到 /.auth/login/<provider> 。 |
客户端代码直接使用提供程序的 SDK 将用户登录,并接收身份验证令牌。 有关详细信息,请参阅提供程序文档。 |
身份验证后 | 提供程序将客户端重定向到 /.auth/login/<provider>/callback 。 |
客户端代码将来自提供程序的令牌发布到 /.auth/login/<provider> 进行验证。 |
建立经过身份验证的会话 | 应用服务将经过身份验证的 Cookie 添加到响应中。 | 应用服务将自身的身份验证令牌返回给客户端代码。 |
提供经过身份验证的内容 | 客户端在后续请求中包含身份验证 Cookie(由浏览器自动处理)。 | 客户端代码在 X-ZUMO-AUTH 标头中提供身份验证令牌(由移动应用客户端 SDK 自动处理)。 |
对于客户端浏览器,应用服务可自动将所有未经身份验证的用户定向到 /.auth/login/<provider>
。 还可以向用户提供一个或多个 /.auth/login/<provider>
链接,让他们使用所选的提供程序登录到你的应用。
授权行为
在 Azure 门户中,当传入请求未经过身份验证时,可以使用多种行为配置应用服务。
允许未经身份验证的请求:此选项会将对未经身份验证的流量授权推迟到由应用程序代码执行。 对于经过身份验证的请求,应用服务还会在 HTTP 标头中一起传递身份验证信息。 使用此选项可以更灵活地处理匿名请求。 通过它,你可向用户提供多个登录提供程序。
需要身份验证:此选项将拒绝任何未经身份验证的应用程序流量。 这个拒绝可以是指向已配置的标识提供者的重定向操作。 在这些情况下,浏览器客户端将重定向到所选提供商的
/.auth/login/<provider>
。 如果匿名请求来自本机移动应用,则返回的响应为HTTP 401 Unauthorized
。 你还可针对所有请求将拒绝配置为HTTP 401 Unauthorized
或HTTP 403 Forbidden
。注意
以这种方式限制访问适用于对应用的所有调用,对于想要主页公开可用的应用程序来说,这可能是不可取的,就像在许多单页应用程序中一样。
令牌存储
应用服务提供内置的令牌存储,这是与 Web 应用、API 或本机移动应用的用户相关联的令牌存储库。 对任何提供程序启用身份验证时,此令牌存储可立即供应用使用。
日志记录和跟踪
如果启用应用程序日志记录,则会在日志文件中直接收集身份验证和授权跟踪。 如果出现意外的身份验证错误,查看现有的应用程序日志即可方便找到所有详细信息。