TLDR: 是否可以在公司的MS Office 365云中拥有guest帐户(例如guest@organization.onmicrosoft.com),该帐户将对组织用户的日历和具有恒定访问令牌的事件具有“读取”权限?恒定访问令牌是指我为此访客用户登录一次,并从Azure AD接收恒定访问令牌(例如应用程序访问身份验证,但作为访客帐户)。
我有我自己公司的MS Office 365帐户,其中有一些用户。有一个全局管理员帐户,很少有普通用户。 还有第二家公司,我们称其为XYZ,它拥有自己的MSO365帐户,其中包含许多管理员和用户。大公司。
现在,我正在编写一个简单的应用程序,在这里我需要有权阅读XYZ公司的用户日历和事件。我的应用程序中包含具有正确的MSO365 ID的必需用户列表。 我认为“读取”特权已足够,因为我们可以通过普通电子邮件发送事件邀请。 我的应用程序将通过MS Graph API等以某种逻辑读取用户事件,并使用CRON作业重新实现它(发送事件邀请等)。
这是我的身份验证问题。 我不想在我的应用程序中拥有“应用程序访问” Azure AD特权。我知道XYZ公司的安全策略不会应用它,因为“应用程序访问”可以访问组织中的所有帐户。应用程序访问意味着XYZ公司的全局管理员通过单点登录Azure AD为我的应用程序应用程序特权。如果他这样做,我将拥有Access令牌,可以在我的应用程序中进行API调用,而无需其他身份验证。
我也不能使用“用户访问” Azure AD身份验证。 由于我的CRON工作和API调用会随后触发。 用户访问权限意味着用户需要登录Azure AD登录服务,这为我提供了用于API调用的访问令牌和刷新令牌。这些令牌的寿命为1小时。
所以我想说一下:是否有可能在XYZ公司的MSO365上拥有一个来宾帐户,该帐户可以让我使用“应用程序访问”之类的身份验证机制? 我的意思是,XYZ公司的全局管理员为我创建了一个来宾帐户,如guest@xyz.onmicrosoft.com,该帐户将有权读取用户的日历和事件。而且,我需要此帐户具有不变的访问令牌,可以在cron作业的api调用中使用它,而无需在Azure AD上登录。
问题是:可能吗?如果可以,怎么办?
答案 0 :(得分:2)
唯一的方法(AFAIK)是使用刷新令牌。 应用程序级访问更健壮,但需要组织范围的访问。
因此,您使用委派访问(用户访问),将刷新令牌存储在某个地方。 您基本上可以无限期地使用这些令牌, 但是某些事件可能会使刷新令牌失效。 它不经常发生,但是可以发生。 在这种情况下,您将需要用户再次登录,以便获得新的刷新令牌。 您还应该存储使用刷新令牌获取令牌时获得的新刷新令牌。 这个新令牌可以覆盖该用户的旧令牌。
当然要记住,刷新令牌是特定于用户的,因此您必须为每个用户存储一个。 这是我们更大的应用程序之一采用的方法。
如果我们无法在后台流程中获取令牌, 该用户在他们身上设置了一个标记,表明其令牌无效, 他们会收到一条通知,要求他们重新进行身份验证才能再次使用该功能。