使用 Azure ACS 访问底层身份提供者的 access/refresh 令牌

Using Azure ACS to get access to underlying identity provider's access/refresh token

我找不到任何关于 ACS 是否提供此功能的明确指示。

我想利用 ACS 完成我的大部分身份验证工作,但我还想访问发送到 ACS 的身份提供者的 access/refresh 令牌。然后我可以 API 调用身份提供者来访问用户的数据,例如日历或个人资料信息(假设我在应用程序授权步骤中请求了此访问)。

这可以使用 ACS 吗?似乎 ACS 抽象出大部分底层身份提供者信息,并且仅提供纯粹用于身份验证目的的 ACS 令牌,而不是用于直接与身份提供者对话。

是也不是:)

ACS 确实为支持该功能的提供商支持该功能。它没有明确记录,因为它并不特殊。 ACS "just create own token for pure authentication purposes"。

如果您使用 FaceBook IdP,ACS 会为您提供 FaceBook 令牌,您可以使用它来查询 FaceBook Graph API。您将获得 API 的哪些权限取决于您的 FaceBook 应用程序需要对用户进行身份验证的哪些权限。我不确定 FaceBook 同意框架的复杂程度,但最后我认为,身份验证用户只能接受所有必需的同意,或拒绝所有。他无法从所有请求中有选择地选择对您的申请授予哪些同意。

话虽如此,您不会从 Google 身份验证提供商那里收到额外的令牌。至少在旧的 OpenID 2.0 实现中。现在,随着 OpenID 2.0 的弃用和将 Google 移动到 OpenID Connect,需要您将 ACS 命名空间显式注册为 Google 的应用程序。在这一点上,我假设(我的推测)您可以声明请求的同意,就像您对 FaceBook 所做的那样。如果 Google 发送令牌,您肯定会通过 ACS 在您的应用程序中收到它。

ACS 是超级强大的服务,不会消亡。正如在引用的博客 post 中,其所有功能迟早会移至 Azure AD 本身。并将提供迁移计划(希望 :))。

但还要注意,ACS 只与 Yahoo、Google、Facebook、Azure AD 和任何 WS-Federation IdP 对话。并且 WS-Federation 协议并不以非常灵活和为您提供所需的灵活性而著称。 ACS理论上也是supports OAuth 2.0,但它的支持不包括Federation,只支持本地身份管理(身份本地到ACS自身)。

另请注意,许多 Microsoft 拥有的服务都在使用 ACS,例如 Visual Studio Online、Azure Service Bus 等。 ACS 既没有死,也不会死,让它的所有客户都在野外。

您可以决定今天使用它。或者,您可以决定使用 Azure AD 本身目前提供的任何功能。或者等到 ACS 完全迁移到 Azure AD。