azure MSGraph单点登录的最佳身份验证流

mctunoxg  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(159)

我试图了解Microsoft Graph身份验证流程以及我应该为我的应用程序使用什么。它已经工作了,但是当前的设置存在一些问题,我们正在为AWS重建它,我想仔细看看如何正确处理MS Graph auth流程。
用例:我目前正在构建一个node.js express API,我想添加一个与Microsoft Graph的集成。因此,当用户访问我们的门户网站时,他们会转到日历,转到M365,然后按下添加集成。然后,用户需要进行一次身份验证,然后可以检索日历。为了被连接到我们的门户网站的设备使用(这些设备在小型平板电脑上运行我们的Android应用程序)。因此,我想检索数据的方式是通过使用webhooks,这样我们就可以监听预订是否被创建/修改/删除,并更新我们数据库中的数据。此外,我们希望这适用于多租户环境。
到目前为止我是怎么做到的:在我目前的应用程序中,我使用了以下特定于MS Graph的库:

"@microsoft/microsoft-graph-client": "^2.0.0",
"msal": "^1.0.0",
"passport-azure-ad": "^4.2.0",
"simple-oauth2": "^3.1.0",

我首先使用OIDCStrategy配置passport,其中包含几个env参数,如clientId、identityMetadata等,以及signInComplete函数。因此,当用户想要授权时,/auth/signin会被调用,并使用passport.authenticate('azuread-openidconnect')和一些参数来获得登录提示。这将请求将Cleverspace azure应用程序添加到租户的权限。如果这被接受,那么它将调用/auth/callback方法,如果一切顺利,则调用signincomplete函数。然后,通过使用带有client和auth env参数的simple-oauth2库创建oath 2令牌。该函数只是将MS Graph用户及其令牌保存到我们的数据库中。如果token过期了,我们再次使用simple-oauth2库更新它,并在token上使用.refresh方法。
问题是:现在我想知道这是否仍然是一种有效的身份验证方式,以及是否有一种方法来处理登录流的问题。因为到目前为止,当用户执行登录过程但授予管理员同意流被禁用时,他们会收到需要管理员批准的消息。出于某种原因,当用户使用管理员帐户登录以将应用程序添加到环境中,并从门户中删除管理员帐户以添加一个非管理员帐户来检索日历时,它似乎不起作用。由于该帐户无法检索任何数据,我在这里假设这是因为用于添加Azure应用程序的帐户是从其环境中获取数据所需的帐户。除非我做错了什么或错过了什么,否则到目前为止,我不知道如何正确地解决这个问题。
问:
1.我当前的身份验证流程是否对我的用例有效,或者我是否需要使用具有单点登录的不同流程,因为必须多次登录以保持系统处于活动状态非常烦人?
1.当我保持当前流时,是否有方法解决我面临的管理员批准问题?
1.如果需要不同的流程,由于他们的Azure配置,“需要管理员批准”流程仍然是一个可能的结果,在这种情况下,是否有解决方案来解决我的问题?
有什么想法吗?
提前感谢!

u0njafvf

u0njafvf1#

创建Azure AD应用程序,方法是选择“

  • 任何组织目录中的帐户(任何Microsoft Entra ID租户-多租户)*“以支持多租户环境

您正在实现的身份验证流有效。如果您不希望用户多次登录,则可以实现On-Behalf-Of流程。SO Thread我的
当我尝试登录到应用程序时,* 我得到了如下相同的错误:*

如果尚未授予添加到Azure AD应用程序的API权限管理员许可,则通常会发生错误 “需要管理员批准”
您必须具有全局管理员、已注册角色管理员或应用程序管理员角色才能授予管理员权限。

  • 转到Azure门户-> Microsoft Entra ID ->应用程序注册->您的应用程序-> API权限->授予管理员同意 *

否则,使用以下端点授予租户范围的管理员同意:

https://login.microsoftonline.com/organizations/adminconsent?client_id=ClientID

然后点击接受

授予API权限的管理员同意:

如果问题仍然存在,请检查以下内容:

  • 转到Azure门户->企业应用程序->同意和验证->用户同意设置 *

将用户同意设置设置为**Allow user consent for apps**:

如果您不想授予所有用户访问应用的权限,请使用管理员同意工作流

  • 转到企业应用程序->同意和权限->管理员同意设置 *

用户登录后,进入需审批界面

参考:

Configure the admin consent workflow - Microsoft Entra

相关问题