将 ACS 命名空间迁移到 Google OpenID Connect

本主题适用于当前使用 Google 作为标识提供程序的访问控制服务 (ACS) 2.0 命名空间的所有者。 ACS 的这一功能是使用 Google 的 OpenID 2.0 实现提供的。 到 2015 年 4 月 20 日,Google 计划停止 OpenID 2.0 支持。 ACS 命名空间将继续使用 Google 的 OpenID 2.0 实现,直到 2015 年 6 月 1 日,届时必须完成这些命名空间的迁移才能使用 Google 的 OpenID 连接实现,否则用户将无法再使用 Google 帐户登录到应用程序。 将你的 ACS 命名空间迁移到 OpenID Connect 不会导致应用程序停机。 但有一个例外情况(参见以下说明),不更改应用程序代码也可以进行这种迁移。 迁移 ACS 命名空间以使用 OpenID Connect 后,需要将后端中的用户标识符迁移到 OpenID Connect 标识符。 此迁移必须在 2017 年 1 月 1 日完成。 它需要后端中的代码更改。 有关两个迁移阶段的详细信息,请参阅下文的重要说明。

重要

请注意以下重要日期并完成需要在每个日期前进行的操作,以确保使用 Google 作为标识提供程序的 ACS 命名空间继续正常工作:

  • 2015 年 6 月 1 日 - ACS 命名空间将停止使用 Google 的 OpenID 2.0 实现。 你必须在此日期之前完成 ACS 命名空间迁移才能使用 Google OpenID Connect。 在此日期之前,如果在迁移过程中遇到问题,可以回滚到 OpenID 2.0。 对于此日期尚未迁移的命名空间,用户将不再能够使用 Google 帐户登录,并且会显示一个页面,指示 Google 帐户的 OpenID 2.0 已消失。 若要使用 Google 帐户还原登录功能,需要迁移命名空间。

    大多数情况下,不需要更改应用程序代码。 但如果你在与应用程序关联的规则组中为 Google 标识提供程序创建了“传递所有声明”规则,可能需要进行代码更改。 这是因为迁移后,Google 中的新声明类型(“主题”)将变得对 ACS 可用,为确保应用程序能够正常处理新出现的声明类型,你可能需要更改代码。 为了成功完成迁移,不需要处理应用程序中的新声明类型。

  • 2017 年 1 月 1 日 – Google 的 OpenID 2.0 和 OpenID Connect 实现使用不同的标识符来唯一标识 Google 用户。 迁移 ACS 命名空间时,ACS 会为你的应用程序提供两个标识符(即当前 OpenID 2.0 标识符和新 OpenID Connect 标识符)。 你必须在此日期之前将后端系统中的用户标识符切换到 OpenID Connect 标识符,并且从此只能使用 OpenID Connect 标识符。 这需要更改应用程序代码。

可以在 Stack Overflow 上帖子有关迁移的问题,并使用“acs-google”标记它们。 我们会尽快回复。

有关 Google 计划的详细信息,请参阅其 OpenID 2.0 迁移指南

迁移核对清单

下表包含的核对清单汇总了迁移 ACS 命名空间以使用 Google OpenID Connect 实现的步骤:

步骤 说明 完成截止日期

1

在 Google 开发人员控制台创建 Google+ 应用程序。

2015 年 6 月 1 日

2

如果你在与应用程序关联的规则组中为 Google 标识提供程序创建了“传递所有声明”规则,则对应用程序进行测试以确保它已做好迁移准备;否则,此步骤为可选。

2015 年 6 月 1 日

3

使用“ACS 管理门户”,通过向它提供 Google+ 应用程序的参数(客户端 ID 和客户端密钥)将 ACS 命名空间切换到使用 Google OpenID Connect 实现。 如果你遇到迁移问题,可以在 2015 年 6 月 1 日之前回滚到 OpenID 2.0。

2015 年 6 月 1 日

4

将后端系统中的用户标识符从当前的 Google OpenID 2.0 标识符迁移到新的 Google OpenID Connect 标识符。 这需要更改代码。

2017 年 1 月 1 日

迁移演练

若要迁移 ACS 命名空间以使用 Google OpenID Connect 实现,请完成以下步骤:

  1. 创建 Google+ 应用程序

    有关如何执行此操作的详细说明,请参阅“如何:创建 Google+ 应用程序”部分。

  2. 确保你的应用程序已做好迁移准备

    如果你有 Google 的“传递所有声明”规则作为与应用程序关联的规则组中的标识提供者,请按照“如何:确保 ACS 应用程序的迁移就绪情况”部分测试应用程序的迁移就绪情况。 这是因为迁移后,Google 中的新声明类型(“主题”)会变得对 ACS 可用。

    注意

    传递所有声明”规则是一个规则,其中输入声明类型和输入声明值设置为 AnyOutput 声明类型,输出声明分别设置为传递第一个输入声明类型和传递输入声明值。 该规则列在“ACS 管理门户”上(如下所示),其中“输出声明”列设置为“传递”

    Passthrough rule

    如果你以前在与应用程序关联的规则组中为 Google 标识提供程序生成或手动添加了规则,则可以跳过此步骤。 这是因为在这些情况下迁移后,不会向应用程序发送新的“主题”声明类型。

    若要了解有关这些选项的详细信息,请参阅 规则组和规则

  3. 将 ACS 命名空间切换为使用 Google OpenID Connect 实现

    1. 转到Microsoft Azure管理门户,登录并单击“Active Directory”。 选择需要迁移的 ACS 命名空间,然后单击“管理”以启动“ACS 管理门户”

    2. 在“ACS 管理门户”上,单击左侧树中的“标识提供程序”或者单击“入门”部分下方的“标识提供程序”链接。 单击“Google”

      Access Control Service Identity Providers Dialog

    3. 在“编辑 Google 标识提供程序”页上,选中“使用 OpenID Connect”

      Edit Google Identity Provider dialog

    4. 在“客户端 ID”和“客户端密钥”字段(现在已启用)中,从 Google+ 应用程序复制相应值。

      Edit Google Identity Provider dialog

      注意

      此时,如果你单击“保存”,则来自 ACS 命名空间的所有 Google 标识提供程序请求都将自动使用 Google OpenID Connect 实现。 如果需要回滚,可以取消选中“使用 OpenID Connect”。 “客户端 ID”和“客户端密钥”仍保存下来,以便日后再次使用。

    5. 单击“ 保存”。

    6. 尝试使用 Google ID 进行登录,以确保已成功切换到使用 OpenID Connect。 如果你遇到登录问题,请返回到“编辑 Google 标识提供程序”页,并取消选中“使用 OpenID Connect”以回滚到 OpenID 2.0。 回滚之后,请检查为命名空间输入的“客户端 ID”和“密钥”(复制自“Google 开发人员控制台”)是否正确;例如,检查有无拼写错误。

  4. 将后端系统中的用户标识符从 Open ID 2.0 从迁移到 OpenID Connect

    必须在 2017 年 1 月 1 日之前将后端系统中的用户标识符从现有的 Google Open ID 2.0 标识符迁移到新的 Google OpenID 连接标识符。 此步骤需要更改代码。 有关详细信息,请参阅如何:将用户现有的 Open ID 2.0 标识符迁移到新的 OpenID 连接用户标识符

如何:创建 Google+ 应用程序

需要 Google 帐户才能执行以下步骤:如果没有,可以在其中 https://accounts.google.com/SignUp获取一个。

  1. 在浏览器窗口中,导航到 Google 开发人员控制台 并使用 Google 帐户凭据登录。

  2. 单击“创建项目”,然后输入“项目名”和“项目 ID”。 选中“服务条款”复选框。 然后单击“创建”。 此时会将应用程序注册到 Google。

    Google Developer Console New Project dialog

  3. 单击左窗格中的 API & 身份验证 。 然后单击“凭据”。 在“OAuth”下,单击“新建客户端 ID”。选择“Web 应用程序”并单击“配置许可屏幕”。 提供“产品名”并单击“保存”

    Google Developer Console Consent screen

  4. 单击左窗格中的 API & 身份验证 。 然后单击“API”。 在“浏览 API”下,搜索并查找“Google+ API”。 将“状态”设为“启用”

    Google Developer Console Browse APIs

  5. 在“创建客户端 ID”对话框中,选择“Web 应用程序”作为“应用程序类型”

    “已授权的 Javascript 源” 字段中,指定命名空间的 FQDN) URL 的完全限定 (域名,包括前导“HTTPS://”和尾随端口号;例如, https://contoso.accesscontrol.windows.net:443.

    “授权重定向 URI ”字段中,指定一个 URI,其中包含命名空间的 FQDN) URL 的完全限定 (域名,包括前导“HTTPS://”和尾随端口号,后跟“/v2/openid”:例如, https://contoso.accesscontrol.windows.net:443/v2/openid.

    单击“创建客户端 ID”

    Google Developer Console Create Client ID screen

  6. 记下“Web 应用程序客户端 ID”页中的“客户端 ID”和“客户端密钥”值。 在“ACS 管理门户”上配置 Google OpenID Connect 实现时需要使用它们

    Google Developer Console Client ID for Web App

    重要

    “客户端密钥”是一个很重要的安全凭据。 请勿泄露。

如何:将用户现有的 Open ID 2.0 标识符迁移到新的 OpenID 连接用户标识符

成功迁移 ACS 命名空间以使用 Google 的 OpenID 连接 实现后,必须在 2017 年 1 月 1 日 (之前,根据 Google 的 OpenID 2.0 迁移指南) 将后端系统中的用户标识符从当前的 OpenID 2.0 标识符迁移到新的 OpenID 连接 标识符。

下表显示了迁移 ACS 命名空间以使用 Google OpenID Connect 实现后,提供给 ACS 使用的声明类型:

声明类型 URI 说明 协议可用性

名称标识符

https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

Google 提供的用户帐户的唯一标识符。 这是(现有)OpenID 2.0 标识符。

OpenID 2.0、OpenID Connect

主题

https://schemas.microsoft.com/identity/claims/subject

Google 提供的用户帐户的唯一标识符。 这是(新)OpenID Connect 标识符。

OpenID Connect

名称

https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

Google 提供的用户帐户的显示名称。

OpenID 2.0、OpenID Connect

(参阅以下说明)

电子邮件地址

https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

Google 提供的用户帐户的电子邮件地址

OpenID 2.0、OpenID Connect

标识提供者

https://schemas.microsoft.com/accesscontrolservice/2010/07/claims/IdentityProvider

ACS 提供的声明,用于向信赖方应用程序告知用户已使用默认的 Google 标识提供程序完成了身份验证。 在 ACS 管理门户的“编辑标识提供程序”页的“领域”字段中,你可以看到此声明的值。

OpenID 2.0、OpenID Connect

注意

对于没有(注册)Google+ 配置文件的 Google 用户,“名称”声明类型的值与 OpenID Connect 中“电子邮件地址”声明类型的值相同。

将(旧)OpenID 2.0 标识符映射到(新)OpenID Connect 标识符后,可以使用“名称标识符”和“主题”声明类型来跟踪和切换后端中现有用户的唯一标识符。

如果你在与应用程序关联的规则组中为 Google 标识提供程序创建了“传递所有声明”规则,你的应用程序将会自动开始接收“主题”声明类型。

如果你以前在与应用程序关联的规则组中为 Google 标识提供程序生成或手动添加了规则,则需要手动添加“主题”声明类型。 有关如何执行此操作的详细信息,请参阅 规则组和规则

Input Claim Configuration

例如,如果你以前在规则组中为 Google 标识提供程序生成了规则,之后又添加了新的“主题”声明类型(如上所示),你将会看到以下内容。

Google passthrough claims

使用此规则组的应用程序将收到“主题”声明类型以及其他声明类型。

注意

在 2017 年 1 月 1 日之后,由于 Google 将终止对标识符映射的支持,因此 ACS 将会在“名称标识符”和“主题”声明类型中填充相同的 OpenID Connect 用户标识符。

如何:确保 ACS 应用程序的迁移就绪情况

你无需更改应用程序代码,就能迁移 ACS 命名空间以使用 Google OpenID Connect 实现,但存在一种例外情况。 此例外情况就是,你在与应用程序关联的规则组中为 Google 标识提供程序创建了“传递所有声明”规则。 这是因为在这种情况下迁移后,会自动向应用程序发送新的“主题”声明类型。

本节概述了为确保所有受迁移影响的应用程序能够正确处理新声明类型而推荐进行的变更和测试过程。

在本“操作方法”中,假定你是 ACS 命名空间(名为 ns-contoso)的所有者,并且你的生产应用程序名为 ProdContosoApp。 同时假定此应用程序使用 Google 作为标识提供程序,并且为 Google 启用了“传递所有声明”规则。

设置

  1. 若要开始,请转到Microsoft Azure管理门户,登录,然后单击“Active Directory”。 选择 ACS 命名空间 (ns-contoso),然后单击“管理”以启动“ACS 管理门户”

  2. 在“ACS 管理门户”上,单击左侧树中的“信赖方应用程序”或者单击“入门”部分下方的“信赖方应用程序”链接。 然后单击你的生产应用程序 (ProdContosoApp)。

  3. 记下 ProdContosoApp 的属性,稍后将会用到。

    Edit Relying Party Application dialog

  4. 单击“规则组”下的“ProdContosoApp 的默认规则组”,以验证它是否为 Google 启用了“传递所有声明”规则。

    Google passthrough claim

步骤 1:在生产 ACS 命名空间中设置应用程序的测试实例

在不同的根 URI 上设置应用程序 测试实例 TestContosoApp;例如, https://contoso-test.com:7777/. 必须在 ns-contoso 命名空间中将其注册为信赖方应用程序 (信赖方应用程序) 。

  1. 在“ACS 管理门户”上,单击左侧树中的“信赖方应用程序”或者单击“入门”部分下方的“信赖方应用程序”链接。 然后单击“信赖方应用程序”页上的“添加”

  2. 在“添加信赖方应用程序”页上执行以下操作

    • 在“名称”中输入测试应用程序的名称。 在此处为 TestContosoApp

    • 在“模式”中选择“手动输入设置”

    • 在“领域”中,输入测试应用程序的 URI。 在这里是 https://contoso-test.com:7777/

    • 在本“操作方法”中,可以将“错误 URL (可选)”保留为空。

    • 对于“令牌格式”、“令牌加密策略”和“令牌生存期(秒)”属性以及“令牌签名设置”部分,使用与 ProdContosoApp 相同的值。

    • 确保已选择“Google”作为“标识提供程序”

    • 在“规则组”下,选择“新建规则组”

    Add Relying Party Application dialog

  3. 单击页面底部的“保存” 。

步骤 2:创建一个规则组,用于模拟应用程序在迁移命名空间以使用 Google 的 OpenID 连接 实现后,应用程序将收到的 ACS 令牌的格式

  1. 在“ACS 管理门户”上,单击左侧树中的“规则组”或者单击“入门”部分下方的“规则组”链接。 然后单击“规则组”页上的“添加”

  2. 在“添加规则组”页上,提供新规则组的名称,比如 ManualGoogleRuleGroup。 单击“保存”。

    Add Rule Group dialog

  3. 在“编辑规则组”页上,单击“添加”链接。

    Edit Rule Group dialog

  4. 在“添加声明规则”页上,确保设置以下值并单击“保存”。 这将为 Google 生成“传递所有声明”规则。

    • If 部分:

      • “标识提供程序”为“Google”

      • “输入声明类型”选项为“任何”

      • “输入声明值”为“任何”

    • Then 部分:

      • “输出声明类型”为“传递第一个声明类型”

      • “输出声明值”为“传递第一个输入声明值”

    • 规则信息部分:

      • 将“说明(可选)”字段保留为空。

    Add Claim Rule dialog

  5. 在“编辑规则组”页上,再次单击“添加”链接。

  6. 在“添加声明规则”页上,确保设置以下值并单击“保存”。 这将为 Google 生成一个“静态”声明规则,此规则模拟添加新的“主题”声明类型,即在迁移后 Google 发送的新用户 OpenID Connect 标识符。

    • If 部分:

      • “标识提供程序”为“Google”

      • “输入声明类型”选项为“任何”

      • “输入声明值”为“任何”

    • Then 部分:

    • 规则信息部分:

      • 将“说明(可选)”字段保留为空。

    Add Claim Rull dialog

  7. 单击“编辑规则组”页上的“保存”

步骤 3:将新规则组与应用程序的测试实例相关联

  1. 在“ACS 管理门户”上,单击左侧树中的“信赖方应用程序”或者单击“入门”部分下方的“信赖方应用程序”链接。 然后单击“信赖方应用程序”页上的“TestContosoApp”

  2. 在“编辑信赖方”页上的“身份验证设置”部分中,选择“ManualGoogleRuleGroup”,然后单击“保存”

    Authentication Settings

此时,所有对测试应用程序的 Google 登录请求都将包含此新声明类型。

步骤 4:测试以确保应用程序可以处理添加使用者声明类型

对你的应用程序进行测试,以确保它可以正常处理新出现的声明类型(“主题”)。 通常情况下,经过精心编写的应用程序应该能够正常处理新添加到令牌的声明类型。 查找并修复任何问题。 (可选)还可以按照“如何:将用户现有的 Open ID 2.0 标识符迁移到新的 OpenID 连接用户标识符部分以执行用户标识符映射。

步骤 5:迁移生产环境

重新构建并部署你的生产应用程序 (ProdContosoApp)。 按照迁移演练中的步骤,迁移命名空间 (ns-contoso) 以使用 Google 的 OpenID 连接 实现。 验证 ProdContosoApp 是否按预期工作。