首页 > 解决方案 > 访客用户的访问令牌和身份验证

问题描述

TLDR:是否可以在公司的 MS Office 365 云中拥有访客帐户(例如 guest@organization.onmicrosoft.com),该帐户将具有对组织用户日历和具有持续访问令牌的事件的“读取”权限?常量访问令牌是指我为该来宾用户登录一次并从 Azure AD 接收常量访问令牌(如应用程序访问身份验证,但作为来宾帐户)。

我有自己公司的 MS Office 365 帐户,其中有一些用户。有一个全局管理员帐户和几个普通用户。还有第二家公司,我们称之为 XYZ,拥有自己的 MSO365 帐户,拥有许多管理员和用户。大公司。

现在我正在编写一个简单的应用程序,我需要在其中读取 XYZ 公司的用户日历和事件。我的应用程序中有所需用户的列表,其中包含正确的 MSO365 ID。我认为“阅读”权限就足够了,因为我们可以通过普通电子邮件发送活动邀请。我的应用程序将通过一些逻辑通过 MS Graph API 等读取用户事件,并通过 CRON 作业实现它(发送事件邀请等)。

这是我的身份验证问题。我不想在我的应用程序中拥有“应用程序访问”Azure AD 权限。我知道 XYZ 公司的安全策略不会应用它,因为“应用程序访问”允许访问组织中的所有帐户。应用程序访问意味着 XYZ 公司的全局管理员通过单点登录 Azure AD 为我的应用程序应用应用程序权限。如果他这样做,我有访问令牌,我可以在我的应用程序中用于 API 调用,而无需额外的身份验证。

我也不能使用“用户访问”Azure AD 身份验证。由于我的 CRON 作业和 API 调用随后触发。用户访问意味着用户需要登录 Azure AD 登录服务,这为我提供了 API 调用的访问令牌和刷新令牌。这些令牌的生命周期为 1 小时。

所以我想:如果有可能在 XYZ 公司的 MSO365 上拥有一个访客帐户,这将让我使用像“应用程序访问”这样的身份验证机制?我的意思是,XYZ 公司的全球管理员为我创建了一个访客帐户,例如 guest@xyz.onmicrosoft.com,该帐户将有权读取用户日历和事件。更重要的是,我需要这个帐户拥有恒定的访问令牌,我可以在我的 cron 作业的 api 调用中使用它,而无需在 Azure AD 上登录。

问题是:有可能吗?如果有怎么办?

标签: azureazure-active-directoryoffice365microsoft-graph-apioffice365api

解决方案


那里(AFAIK)的唯一方法是使用刷新令牌。应用程序级别的访问更强大,但需要组织范围的访问。

因此,您使用委托访问(用户访问),将刷新令牌存储在某处。您基本上可以无限期地使用这些令牌,但是某些事件可能会使刷新令牌过期。它不会经常发生,但它可能会发生。在这种情况下,您需要用户再次登录,以便获得新的刷新令牌。您还应该存储使用刷新令牌获取令牌时获得的新刷新令牌。这个新令牌可以覆盖该用户的旧令牌。

当然请记住,刷新令牌是特定于用户的,因此您必须为每个用户存储一个。这是我们较大的应用程序之一所采用的方法。

如果我们未能在后台进程中获取令牌,则该用户会在他们身上设置一个标志,表明他们的令牌不起作用,他们将收到一条通知,告知他们需要重新验证该功能才能再次开始工作。


推荐阅读