将 ACS 命名空间迁移到 Google OpenID Connect
本主题适用于当前使用 Google 作为标识提供者的访问控制服务 (ACS) 2.0 命名空间的所有者。 ACS 使用 Google 的 OpenID 2.0 实现提供此功能。 谷歌计划在 2015 年 4 月 20 日前停止 OpenID 2.0 支持。 ACS 命名空间将继续使用 Google 的 OpenID 2.0 实现,直到 2015 年 6 月 1 日,到 2015 年 6 月 1 日,必须完成这些命名空间的迁移才能使用 Google 的 OpenID Connect 实现,否则用户将无法再使用 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 向 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 管理门户 将 ACS 命名空间切换为使用 Google 的 OpenID Connect 实现,方法是使用 Google+ 应用程序的参数(客户端 ID 和客户端密码)。 如果在迁移时遇到问题,可以回滚到 OpenID 2.0,直到 2015 年 6 月 1 日。 |
2015 年 6 月 1 日 |
4 |
将后端系统中的用户标识符从当前的 Google OpenID 2.0 标识符迁移到新的 Google OpenID Connect 标识符。 这需要更改代码。 |
2017 年 1 月 1 日 |
迁移演练
若要迁移 ACS 命名空间以使用 Google 的 OpenID Connect 实现,请完成以下步骤:
创建 Google+ 应用程序
有关如何执行此操作的详细说明,请参阅“如何:创建 Google+ 应用程序”部分。
确保应用程序已准备好迁移
如果你有“传递所有声明”规则,Google 作为与应用程序关联的规则组中的标识提供者,请按照“如何:确保 ACS 应用程序的迁移就绪情况”部分来测试应用程序的迁移准备情况。 这是因为在迁移后,新的声明类型(使用者)可从 Google 向 ACS 提供。
注意
“传递所有声明”规则是一个规则,其中 输入声明类型 和 输入声明值 设置为 任何 和 输出声明类型 和 输出声明值 分别设置为 传递第一个输入声明类型 和 传递输入声明值。 规则列在 ACS 管理门户 上,如下所示,输出声明 列设置为 直通。
如果之前已生成规则或手动为 Google 添加规则作为与应用程序关联的规则组中的标识提供者,则可以跳过此步骤。 这是因为在迁移后,新的 使用者 声明类型不会发送到应用程序。
若要详细了解这些选项,请参阅 规则组和规则。
切换 ACS 命名空间以使用 Google 的 OpenID Connect 实现
转到 azure 管理门户 Microsoft
,登录并单击 Active Directory 。 选择要迁移的 ACS 命名空间,然后单击 “管理”以启动 ACS 管理门户。在 ACS 管理门户上,单击左侧树中的 标识提供者,或单击 入门 部分下的 标识提供者 链接。 单击 Google。
在 编辑 Google 标识提供者 页中,检查 使用 OpenID Connect。
在 客户端 ID 和 客户端机密 字段(现已启用),从 Google+ 应用程序中复制相应的值。
注意
此时,如果单击“保存”
,来自 ACS 命名空间的所有 Google 标识提供者请求将自动使用 Google 的 OpenID Connect 实现。 如果需要回滚,可以取消选中 使用 OpenID Connect。 客户端 ID 和客户端机密保持保存状态,稍后可以重新使用。 单击 保存。
尝试使用 Google ID 登录,以确保切换到使用 OpenID Connect 已成功。 如果登录时遇到问题,请返回到 编辑 Google 标识提供者 页,然后取消检查 使用 OpenID Connect 回滚到 OpenID 2.0。 回滚后,请检查从 Google 开发人员 控制台复制的 客户端 ID 和 机密 是否已正确输入命名空间;例如,检查拼写错误。
将后端系统中的用户标识符从 Open ID 2.0 迁移到 OpenID Connect
必须在 2017 年 1 月 1 日之前将后端系统中的用户标识符从现有的 Google Open ID 2.0 标识符迁移到新的 Google OpenID Connect 标识符。 此步骤需要更改代码。 有关详细信息,请参阅如何:将用户现有的 Open ID 2.0 标识符迁移到新的 OpenID Connect 用户标识符
如何:创建 Google+ 应用程序
需要 Google 帐户才能执行以下步骤:如果没有,可以在 https://accounts.google.com/SignUp获取一个。
在浏览器窗口中,导航到 Google 开发人员控制台 并使用 Google 帐户凭据登录。
单击 创建项目,然后输入 项目名称,项目 ID。 选中 服务条款 复选框。 然后单击 创建。 这会向 Google 注册应用程序。
单击左窗格中 & 身份验证
API。 然后单击 凭据。 在 OAuth 下,单击创建新的客户端 ID 。选择Web 应用程序 ,然后单击“配置同意”屏幕。 提供 产品名称 ,然后单击“保存。 单击左窗格中 & 身份验证
API。 然后单击 API。 在 浏览 API下,搜索并查找 Google+ API。 将 状态打开。 在“创建客户端 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。
记下 web 应用程序 页
客户端 ID 和 客户端机密 的值。 你需要他们在 ACS 管理门户上配置 Google 的 OpenID Connect 实现。 重要
客户端机密 是重要的安全凭据。 将其保密。
如何:将用户现有的 Open ID 2.0 标识符迁移到新的 OpenID Connect 用户标识符
成功迁移 ACS 命名空间以使用 Google 的 OpenID Connect 实现后,一直持续到 2017 年 1 月 1 日(根据 Google 的 OpenID 2.0 迁移指南),将后端系统中的用户标识符从当前的 OpenID 2.0 标识符迁移到新的 OpenID Connect 标识符。
下表显示了从 Google 迁移到 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 用户,Name 声明类型的值与 OpenID Connect 中 电子邮件地址 声明类型的值相同。
名称标识符 和 使用者 声明类型可用于跟踪和切换后端中的现有用户的唯一标识符,方法是将 (旧版) OpenID 2.0 标识符映射到 (新) OpenID Connect 标识符。
如果你有“传递所有声明”规则,Google 作为与应用程序关联的规则组中的标识提供者,应用程序将自动开始接收 使用者 声明类型。
如果之前已生成规则或手动为 Google 添加规则作为与应用程序关联的规则组中的标识提供者,则需要手动添加 使用者 声明类型。 有关如何执行此操作的详细信息,请参阅 规则组和规则。
例如,如果你以前在规则组中为 Google 生成了标识提供者的规则,然后添加新的 使用者 声明类型(如上所示),你将看到以下内容。
使用此规则组的应用程序将收到 使用者 声明类型以及其他声明类型。
注意
在 2017 年 1 月 1 日之后,当 Google 停止支持标识符映射时,ACS 将填充 NameIdentifier 和 Subject 声明类型,并使用相同的 OpenID Connect 用户标识符。
如何:确保 ACS 应用程序的迁移就绪情况
除了一个例外,无需更改应用程序代码,即可将 ACS 命名空间迁移到使用 Google 的 OpenID Connect 实现。 例外情况是,如果你有“传递所有声明”规则,Google 作为与应用程序关联的规则组中的标识提供者。 这是因为在迁移后,新的声明类型(使用者)会自动发送到应用程序。
本部分概述了可以遵循的建议更改和测试过程,以确保每个受迁移影响的应用程序都准备好处理新的声明类型。
出于本操作方法的目的,假设你是名为 ns-contoso 的 ACS 命名空间的所有者,并且生产中的应用程序称为 ProdContosoApp。 此外,假设此应用程序使用 Google 作为标识提供者,并具有为 Google 启用的所有声明“规则的”
设置
若要开始,请转到 Azure 管理门户Microsoft
,登录,然后单击 Active Directory 。 选择 ACS 命名空间(ns-contoso),然后单击 管理 以启动 ACS 管理门户。在 ACS 管理门户上,单击左侧树中的 信赖方应用程序,或单击 入门 部分下的 信赖方应用程序 链接。 然后单击生产应用程序(ProdContosoApp)。
记下 ProdContosoApp的属性,稍后将需要这些属性。
在
规则组 下单击“ProdContosoApp 的默认规则组默认规则组”,验证它是否已启用“ 传递所有声明 ”规则。
步骤 1:在生产 ACS 命名空间中设置应用程序的测试实例
在不同的根 URI 上设置应用程序的测试实例,TestContosoApp;例如,https://contoso-test.com:7777/。 必须在 ns-contoso 命名空间中将其注册为信赖方应用程序(信赖方应用程序)。
在 ACS 管理门户上,单击左侧树中的 信赖方应用程序,或单击 入门 部分下的 信赖方应用程序 链接。 然后单击 信赖方应用程序 页上的“添加”。
在 添加信赖方应用程序 页上,执行以下操作:
在 名称中,键入测试应用程序的名称。 此处 TestContosoApp。
在 模式中,选择 手动输入设置。
在 领域中,键入测试应用程序的 URI。 这里 https://contoso-test.com:7777/。
出于本操作方法的目的,可以将 错误 URL(可选)保留为空。
对于 令牌格式、令牌加密策略和 令牌生存期(秒) 属性和 令牌签名设置 部分,请使用用于 ProdContosoApp的值。
请确保已选择 Google 作为 标识提供者。
在 规则组下,选择 创建新规则组。
单击页面底部 保存。
步骤 2:创建一个规则组,该规则组模拟一旦迁移命名空间以使用 Google 的 OpenID Connect 实现,应用程序将收到的 ACS 令牌的格式
在 ACS 管理门户上,单击左侧树中的 规则组,或单击 入门 部分下的 规则组 链接。 然后单击 规则组 页上 添加。
在 “添加规则组” 页上,提供新规则组的名称,例如 Manual GoogleRuleGroup。 单击“保存”。
在
“编辑规则组” 页上,单击“添加”链接。 在 “添加声明规则” 页中,确保已准备好以下值,然后单击 “保存”。 这将为 Google 生成“传递所有声明”规则。
如果 部分:
标识提供者Google。
输入声明类型 选择 任何。
输入声明值任何。
然后 部分:
输出声明类型传递第一个声明类型。
输出声明值传递第一个输入声明值。
规则信息 部分:
- 将 说明(可选) 字段留空。
在
编辑规则组 页上,再次单击“添加”链接。 在“添加声明规则” 页上,确保已准备好以下值,然后单击“保存”。 这将为 Google 生成一个“静态”声明规则,该规则模拟添加新的声明类型,Subject,这是 Google 在迁移时发送应用程序的新用户 OpenID Connect 标识符。
如果 部分:
标识提供者Google。
输入声明类型 选择 任何。
输入声明值任何。
然后 部分:
输出声明类型Enter 类型。 在字段中,键入 https://schemas.microsoft.com/identity/claims/subject。
输出声明值Enter 值。 在字段中,键入 123456。
规则信息 部分:
- 将 说明(可选) 字段留空。
在 编辑规则组 页上单击 保存。
步骤 3:将新的规则组与应用程序的测试实例相关联
在 ACS 管理门户上,单击左侧树中的 信赖方应用程序,或单击 入门 部分下的 信赖方应用程序 链接。 然后在 信赖方应用程序 页上单击 TestContosoApp。
在“编辑信赖方”页上,在 身份验证设置 部分选择 Manual GoogleRuleGroup,然后单击 “保存”。
此时,对测试应用程序的所有 Google 登录请求都将包括新的声明类型。
步骤 4:测试以确保应用程序可以处理添加使用者声明类型
测试应用程序,以确保它可以正常处理新的声明类型(使用者)的存在。 通常,写入良好的应用程序应该对要添加到令牌的新声明类型可靠。 查找并修复任何问题。 (可选)还可以按照“如何:将用户现有的 Open ID 2.0 标识符迁移到新的 OpenID Connect 用户标识符”部分以执行用户标识符映射。
步骤 5:迁移生产环境
重新生成和部署生产应用程序(ProdContosoApp)。 按照迁移演练中的步骤迁移命名空间(ns-contoso),以使用 Google 的 OpenID Connect 实现。 验证 ProdContosoApp 是否按预期工作。