首页 > 解决方案 > 如何在我的 Web 应用程序中生成访问令牌以与 Exchange Online Powershell 模块一起使用?

问题描述

我有一个用户登录到我的 Web 应用程序,该应用程序已经针对 Office 365 Graph API 对他们进行身份验证。我还需要代表用户执行一些只能通过 Exchange Online Powershell 完成的事情。因此,我想将访问令牌(使用 passport.js 或 Go 的 oauth2 生成)传递给脚本来执行这些操作。

我已经使用这个有用的帖子来几乎完全到达那里。它显示了如何将凭据传递到 Exchange 在线会话。但我不知道如何在没有客户端密码的情况下获取访问令牌。我有客户端/应用程序 ID 和资源 ID(使用链接帖子中显示的方法),但除非我弄错了,否则我还需要一个客户端密码。我错过了什么?

(对不起,我是所有这些领域的新手。如果需要更多信息,请告诉我。)

标签: powershelloauth-2.0office365passport.js

解决方案


根据您的定义,您正在尝试访问 O365 中的用户邮箱。

简单的答案(这不是 PoSH 问题/限制):访问/刷新令牌是用户特定的,就像他们在 ADDS/AAD 中的密码一样。

您必须先为用户或委派分配 O365 应用程序模拟(自动授予 OnBehalfOfStuff)角色。

从风险管理的角度考虑一下。如果任何 AppDev 可以在未经用户/管理员同意的情况下获取所有用户的 IDAM 令牌,那在整个行业范围内都是行不通的。

配置模拟 模拟使调用者(例如服务应用程序)能够模拟用户帐户。调用方可以使用与模拟帐户关联的权限而不是与调用方帐户关联的权限来执行操作。 https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-configure-impersonation

这需要您 O365/AAD 全局管理员提前为您的帐户/您的应用程序帐户/服务帐户执行此操作。出于显而易见的原因,大多数安全人员真的不愿意随机给出这个权利。然而,Exchange 应用程序模拟可以限定范围。

从链接...

配置 ApplicationImpersonation 角色

当您或您的 Exchanger 服务器管理员分配 ApplicationImpersonation 角色时,请使用 New-ManagementRoleAssignment cmdlet 的以下参数:

•Name – 角色分配的友好名称。每次分配角色时,都会在 RBAC 角色列表中创建一个条目。您可以使用 Get-ManagementRoleAssignment cmdlet 验证角色分配。

•Role – 要分配的 RBAC 角色。设置模拟时,您分配 ApplicationImpersonation 角色。

•用户– 服务帐户。

CustomRecipientScope – 服务帐户可以模拟的用户范围。服务帐户将只被允许模拟指定范围内的其他用户。如果未指定范围,则为服务帐户授予组织中所有用户的 ApplicationImpersonation 角色。您可以使用 New-ManagementScope cmdlet 创建自定义管理范围。


推荐阅读