Azure 应用服务中 API 应用的身份验证和授权

qq_40158049 2017-09-08 05:25:28
Azure 应用服务提供内置的身份验证与授权服务,可实现 OAuth 2.0 和 OpenID Connect。本文介绍 Azure 应用服务中 API 应用可用的服务和选项。

下图演示了应用服务身份验证的几个重要特征:
-预处理传入的 API 请求,这意味着,可以处理应用服务支持的任何语言或框架。
-提供多个选项用于确定要在自身代码中完成多少身份验证工作。
-适用于最终用户与服务帐户身份验证。
-支持五个标识提供者:Azure Active Directory 和 Microsoft 帐户。
-对 API 应用、Web 应用和移动应用的工作原理相同。


不限语言

应用服务身份验证处理在请求进入 API 应用之前进行,这意味着,无论 API 应用是以哪种语言或框架编写,都可以使用身份验证功能。API 可以基于 ASP.NET、Java、Node.js,或应用服务支持的任何框架。

应用服务在 HTTP 请求的 Authorization 标头中传递 JSON Web 令牌 (JWT),以任何语言或框架编写的代码都可以从该令牌获取所需的信息。此外,应用服务通过设置一些特殊标头(如下所示)来方便访问最常用的声明:
·X-MS-CLIENT-PRINCIPAL-NAME
·X-MS-CLIENT-PRINCIPAL-ID
在 .NET API 中,可以使用 Authorize 属性,如果想要更精细的授权,可以基于声明轻松编写代码,因为 .NET 类中已经填充了声明信息。

多个保护选项

应用服务可以防止匿名 HTTP 请求进入 API 应用、传递所有请求和验证请求中包含的令牌,或者不采取任何措施即放行所有请求:
1.只允许经过身份验证的请求进入 API 应用。
如果应用服务收到来自浏览器的匿名请求,会将其重定向到所选身份验证提供程序(Azure AD 等)的登录页。
使用此选项时,不需要在应用中编写任何身份验证代码。由于 HTTP 标头中已提供最重要的声明,因此授权代码变得相当简单。
2.允许所有请求进入 API 应用,但会验证经过身份验证的请求,并在 HTTP 标头中传递身份验证信息。
使用此选项可以更灵活地处理匿名请求,但如果想要防止匿名用户使用 API,则必须编写代码。由于最常用的声明在 HTTP 请求的标头中传递,因此授权代码相对简单。
3.允许所有请求进入 API,不处理请求中的身份验证信息。
此选项将身份验证和授权任务全部交由应用程序代码来处理。

在 Azure 门户上的“身份验证/授权”边栏选项卡中选择所需的选项。


如果使用选项 1 和 2,请打开“应用服务身份验证”,然后在“请求未经身份验证时需执行的操作”下拉列表中,选择“登录”或“允许请求(无操作)”。如果选择“登录”,则必须选择身份验证提供程序并配置该提供程序。

有关如何配置身份验证的详细信息,请参阅如何将应用服务应用程序配置为使用 Azure Active Directory 登录。此文章适用于 API 应用和移动应用,并链接到有关其他身份验证提供程序的其他文章。

服务帐户身份验证

应用服务身份验证适用于从某个 API 应用调用另一个 API 应用之类的内部方案。在此方案中,可以使用服务帐户凭据(而不是用户凭据)来获取令牌。在 Azure Active Directory 中,服务帐户也称为 服务主体 ,使用此类帐户的身份验证也称为服务到服务方案。

对于服务到服务方案,请使用 Azure Active Directory 保护所调用的 API 应用,并在调用 API 应用时提供 AAD 服务主体授权令牌。通过提供客户端 ID 和客户端机密,可以从 AAD 应用程序获取令牌。不需要像过去处理移动服务 Zumo 令牌时那样使用仅限 Azure 的特殊代码。API 应用的服务主体身份验证教程讲解了这种使用 ASP.NET API 应用的方案示例。

若要处理服务到服务方案但不使用应用服务身份验证,请使用客户端证书或基本身份验证。有关 Azure 中客户端证书的信息,请参阅如何为 Web 应用配置 TLS 相互身份验证。有关 ASP.NET 中基本身份验证的信息,请参阅 Authentication Filters in ASP.NET Web API 2(ASP.NET Web API 2 中的身份验证筛选器)。

移动客户端身份验证
有关如何处理来自移动客户端的身份验证的信息,请参阅有关移动应用身份验证的文档。移动应用和 API 应用的应用服务身份验证运用相同的工作原理。

关于后续步骤,各位可以点击这里进行浏览
...全文
1062 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,245

社区成员

发帖
与我相关
我的任务
社区描述
OpenAPI
社区管理员
  • OpenAPI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧