来宾用户的访问令牌和身份验证
Access token and authentication for guest user
TLDR:
is it possible to have guest account, like guest@organization.onmicrosoft.com, at company's MS Office 365 cloud that will have "read" permission to organization's users calendars and events with constant access token? By constant access token I mean that I sign in once for this guest user and receive constant access token from Azure AD (like application access authentication but as guest account).
我有我自己公司的 MS Office 365 帐户,其中有一些用户。有一个全局管理员帐户和很少的普通用户。
还有第二家公司,我们称它为 XYZ,拥有自己的 MSO365 帐户,拥有许多管理员和用户。大公司。
现在我正在编写一个简单的应用程序,我需要有权读取 XYZ 公司的用户日历和事件。我的应用程序中有所需用户的列表,其中包含正确的 MSO365 ID。
我认为 'read' 权限就足够了,因为我们可以通过普通电子邮件发送活动邀请。
我的应用程序将通过 MS Graph API 等使用一些逻辑读取用户事件,并使用 CRON 作业释放它(发送事件邀请等)。
这是我的身份验证问题。
我不想在我的应用程序中拥有 "application access" Azure AD 权限。我知道 XYZ 公司的安全策略不会应用它,因为 "application access" 允许访问组织中的所有帐户。应用程序访问是指XYZ公司的全局管理员通过单点登录到Azure AD为我的应用程序申请应用程序权限。如果他这样做,我就有了访问令牌,我可以使用它在我的应用程序中进行 API 调用,而无需额外的身份验证。
我也无法使用 "user access" Azure AD 身份验证。
由于我的 CRON 工作和 API 调用然后触发。
用户访问意味着用户需要在 Azure AD 登录服务上登录,这为我提供了 API 调用的访问令牌和刷新令牌。这些令牌的生命周期为 1 小时。
所以我想:如果有可能在 XYZ 公司的 MSO365 上有一个来宾帐户,那会让我使用像 "application access" 这样的身份验证机制吗?
我的意思是 XYZ 公司的全球管理员为我创建了一个来宾帐户,如 guest@xyz.onmicrosoft.com,它将有权读取用户日历和事件。更重要的是,我需要这个帐户拥有持续的访问令牌,我可以在我的 cron 作业的 api 调用中使用它,而无需在 Azure AD 上登录。
问题是:这可能吗?如果是怎么办?
唯一的方法(AFAIK)是使用刷新令牌。
应用程序级访问更可靠,但需要组织范围内的访问。
因此您使用委托访问(用户访问),将刷新令牌存储在某处。
你基本上可以无限期地使用这些代币,
但是某些事件会使刷新令牌过期。
它不会经常发生,但它可能会发生。
在这种情况下,您将需要用户再次登录,以便您可以获得新的刷新令牌。
您还应该存储使用刷新令牌获取令牌时获得的新刷新令牌。
这个新令牌可以覆盖该用户的旧令牌。
当然请记住,刷新令牌是特定于用户的,因此您必须为每个用户存储一个。
这是我们的一个更大的应用程序采用的方法。
如果我们在后台进程中获取token失败,
该用户在他们身上设置了一个标志,表明他们的令牌不起作用,
他们会收到一条通知,告知他们需要重新验证该功能才能再次开始工作。
TLDR: is it possible to have guest account, like guest@organization.onmicrosoft.com, at company's MS Office 365 cloud that will have "read" permission to organization's users calendars and events with constant access token? By constant access token I mean that I sign in once for this guest user and receive constant access token from Azure AD (like application access authentication but as guest account).
我有我自己公司的 MS Office 365 帐户,其中有一些用户。有一个全局管理员帐户和很少的普通用户。 还有第二家公司,我们称它为 XYZ,拥有自己的 MSO365 帐户,拥有许多管理员和用户。大公司。
现在我正在编写一个简单的应用程序,我需要有权读取 XYZ 公司的用户日历和事件。我的应用程序中有所需用户的列表,其中包含正确的 MSO365 ID。 我认为 'read' 权限就足够了,因为我们可以通过普通电子邮件发送活动邀请。 我的应用程序将通过 MS Graph API 等使用一些逻辑读取用户事件,并使用 CRON 作业释放它(发送事件邀请等)。
这是我的身份验证问题。 我不想在我的应用程序中拥有 "application access" Azure AD 权限。我知道 XYZ 公司的安全策略不会应用它,因为 "application access" 允许访问组织中的所有帐户。应用程序访问是指XYZ公司的全局管理员通过单点登录到Azure AD为我的应用程序申请应用程序权限。如果他这样做,我就有了访问令牌,我可以使用它在我的应用程序中进行 API 调用,而无需额外的身份验证。
我也无法使用 "user access" Azure AD 身份验证。 由于我的 CRON 工作和 API 调用然后触发。 用户访问意味着用户需要在 Azure AD 登录服务上登录,这为我提供了 API 调用的访问令牌和刷新令牌。这些令牌的生命周期为 1 小时。
所以我想:如果有可能在 XYZ 公司的 MSO365 上有一个来宾帐户,那会让我使用像 "application access" 这样的身份验证机制吗? 我的意思是 XYZ 公司的全球管理员为我创建了一个来宾帐户,如 guest@xyz.onmicrosoft.com,它将有权读取用户日历和事件。更重要的是,我需要这个帐户拥有持续的访问令牌,我可以在我的 cron 作业的 api 调用中使用它,而无需在 Azure AD 上登录。
问题是:这可能吗?如果是怎么办?
唯一的方法(AFAIK)是使用刷新令牌。 应用程序级访问更可靠,但需要组织范围内的访问。
因此您使用委托访问(用户访问),将刷新令牌存储在某处。 你基本上可以无限期地使用这些代币, 但是某些事件会使刷新令牌过期。 它不会经常发生,但它可能会发生。 在这种情况下,您将需要用户再次登录,以便您可以获得新的刷新令牌。 您还应该存储使用刷新令牌获取令牌时获得的新刷新令牌。 这个新令牌可以覆盖该用户的旧令牌。
当然请记住,刷新令牌是特定于用户的,因此您必须为每个用户存储一个。 这是我们的一个更大的应用程序采用的方法。
如果我们在后台进程中获取token失败, 该用户在他们身上设置了一个标志,表明他们的令牌不起作用, 他们会收到一条通知,告知他们需要重新验证该功能才能再次开始工作。