本文介绍了如何将 Azure 应用服务或 Azure Functions 配置为使用符合 OpenID Connect (OIDC) 规范的自定义身份验证提供程序。 OIDC 是许多标识提供者使用的行业标准。 无需了解规范的详细信息,才能为应用使用 OIDC 标识提供者。
你可以将应用配置为使用一个或多个 OIDC 提供者。 必须在应用配置中为每个 OIDC 提供程序提供唯一的友好名称。 只有一个提供程序可以充当默认的重定向目标。
将应用注册到 OIDC 标识提供者
提供程序要求通过在表单 <app-url>/.auth/login/<provider-name>/callback
中指定重定向 URI 来注册应用程序。 在重定向 URI 中,替换为 <app-url>
应用 URL,并使用 <provider-name>
在 Azure 中提供 OpenID 提供程序的友好名称。
注释
OpenID 提供程序名称不能包含连字符 -
,因为基于此名称创建了应用服务应用程序设置,并且应用程序设置不支持连字符。 可以改用下划线 _
。
注册应用时,需要为应用程序收集 客户端 ID 和 客户端密码 。 记下这些值,以在 Azure 应用配置中使用。
注释
- 客户端机密值是重要的安全凭据。 请勿与任何人共享此机密或在客户端应用程序中分发该机密。
- 如果你希望用户使用交互式授权代码流获取访问令牌,你的应用必须提供客户端密码。 如果不想获取访问令牌,则无需使用机密。
还需要提供程序的 OIDC 元数据。 此 元数据通常在配置元数据文档中 公开,可以通过追加 /.well-known/openid-configuration
到提供程序的颁发者 URL 来访问形成的路径。
如果无法访问配置元数据文档,请单独获取以下值:
- 颁发者 URL,有时显示为
issuer
。 -
OAuth 2.0 授权终结点,有时显示为
authorization_endpoint
。 -
OAuth 2.0 令牌终结点,有时显示为
token_endpoint
. -
OAuth 2.0 JSON Web 密钥集文档的 URL 有时显示为
jwks_uri
。
每个标识提供者应提供有关如何完成注册步骤的说明。 某些提供程序可能需要为其配置或使用它们提供的值执行额外的步骤。 例如,Apple 提供了用于创建 JSON Web 令牌(JWT)的私钥,该密钥在应用配置中输入为机密。 有关详细信息,请参阅 “创建客户端密码”。
向应用程序添加提供程序信息
若要在 Azure 中配置 OpenID Connect 提供程序,请执行以下步骤:
在应用的 Azure 门户页上,在左侧导航菜单中的“设置”下选择“身份验证”。
在“身份验证”页上,选择“添加标识提供者”,或在“标识提供者”部分选择“添加提供程序”。
在 “添加标识提供者 ”页上,选择 OpenID Connect 作为提供程序。
对于 OpenID 提供程序名称,请输入为 OIDC 提供程序选择的友好名称。
在 OpenID Connect 提供程序配置下,如果有标识提供者的元数据文档,请选择“元数据”条目的文档 URL。
如果没有元数据文档,请选择 Enter 元数据,并在相应的字段中输入标识提供者中的每个 URL。
在 “应用注册”下,提供之前为 客户端 ID 和 客户端机密收集的值。
如果这是应用程序的第一个标识提供者, 则应用服务身份验证设置 部分会显示有设置,例如应用程序如何响应未经身份验证的请求。 默认选择将重定向所有请求以使用新提供程序登录。
如果已为应用配置了标识提供者,则不会显示此部分。 可以根据需要稍后自定义设置。
选择“添加”以完成标识提供者的设置。
在 “身份验证 ”页上, <oidc_friendly_name>(自定义提供程序) 现在显示在 “标识提供者 ”部分中。 可以通过在 “编辑”下选择提供程序的铅笔图标来编辑提供程序的设置。
“ 身份验证设置” 部分显示设置,例如应用程序如何响应未经身份验证的请求。 可以通过选择“身份验证设置”旁边的“编辑”来编辑这些设置。 若要了解有关选项的详细信息,请参阅 身份验证流。
应用程序机密存储为名为“槽贴<oidc_friendly_name>_AUTHENTICATION_SECRET
。 可以在门户中应用的“环境变量”页的“应用设置”选项卡上看到该设置。 如果要在 Azure Key Vault 中管理机密,可以编辑设置以使用 Key Vault 引用。
注释
若要添加范围,请在提供程序的注册门户中定义应用程序拥有的权限。 应用可以在登录时请求使用这些权限的范围。
- Azure 需要
openid
、profile
和email
范围。 请确保在标识提供者中至少使用这些范围配置应用注册。 - 范围
aud
必须与配置的 客户端 ID 相同。无法为此提供程序配置允许的访问群体。