AWS Amplify SPA React + Cognito(已启用 Microsoft Azure Ad Enterprise SSO)+ Microsoft Graph API

Posted

技术标签:

【中文标题】AWS Amplify SPA React + Cognito(已启用 Microsoft Azure Ad Enterprise SSO)+ Microsoft Graph API【英文标题】:AWS Amplify SPA React + Cognito (Microsoft Azure Ad Enterprise SSO Enabled ) + Microsoft Graph API 【发布时间】:2020-01-29 11:03:09 【问题描述】:

我使用 React 开发单页应用程序,使用 AWS Amplify 进行无服务器集成。为了让用户登录,我已成功使用 SAML 配置 AWS Cognito 控制台,以便我们的组织用户无需注册即可登录应用程序并访问 AWS 资源。我们使用 Microsoft Azure Ad 作为身份提供者。

现在在应用程序中,我必须实现一个可以使用 Microsoft Graph API 查询 Azure AD 用户的搜索。

GET https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'J')

我们拥有访问图表的适当权限。 我们拥有客户端 ID、机密 ID,并且我们已在 Azure 中为应用程序启用了隐式授权流。

由于我使用 AWS Amplify 和 Cognito 对用户进行身份验证,因此当用户登录应用程序时,我会收到 IdToken 和 accessToken。

const user = await Auth.currentAuthenticatedUser();
const idToken = user.signInUserSession.idToken.jwtToken;
const accessToken = user.signInUserSession.accessToken.jwtToken;

但是这个 id-token 和 access-token 属于 Cognito 而不是 Microsoft Azure AD。

Microsoft 提供 MSAL.js(用于 OAuth 2 隐式授权流)用于在 SPA 上进行图形 API 调用,但我们无法在应用程序中使用它,因为我们使用 AWS Amplify (Cognito) 进行身份验证。

那么如何在 AWS Lamda 或任何其他 AWS 服务的帮助下进行图形调用。如果您推荐任何其他方法,那将非常有帮助。

【问题讨论】:

如果您针对 Cognito 进行身份验证,则无法从前端使用 Graph API。您的后端可以使用客户端凭据流和应用程序权限(非委派权限)进行调用。 谢谢,您能否建议如何使用 AWS Amplify (Rest API) 实现相同的功能。 【参考方案1】:

来自 Cognito 的 ID 令牌和访问令牌无权访问 Microsoft Graph 数据。

要调用 Microsoft Graph,您的应用必须从 Microsoft 身份平台获取访问令牌。访问令牌包含有关它对通过 Microsoft Graph 可用的资源和 API 的权限的信息。见auth-concepts。

正如 juunas 所建议的,您可以实现客户端凭据流来访问 Graph 资源。

【讨论】:

谢谢OAuth 2.0 client credentials flow - 如果我们采用这种方法,我们必须进行服务器端调用,我不明白如何使用 AWS Amplify 来解决这个问题(使用 REST API ) 或 AWS Lambda 函数或任何其他 AWS 方法。 (制作admin consent call,响应重定向到重定向URL,如何处理)

以上是关于AWS Amplify SPA React + Cognito(已启用 Microsoft Azure Ad Enterprise SSO)+ Microsoft Graph API的主要内容,如果未能解决你的问题,请参考以下文章

aws-amplify-react 和 @aws-amplify/ui-react 有啥区别?

AWS Amplify and React - 找不到模块:无法解析“@aws-amplify/analytics”

aws-amplify-react Connect 首先返回未定义的数据

使用 Amplify 集成构建 AWS Amplify React 应用程序时总是缺少 aws-exports.js

AuthError - 错误:未正确配置 Amplify / AWS cognito,React JS

无法解析模块“@aws-amplify/ui-react/styles.css”的路径