powershell - 使用 PowerShell 和新式身份验证连接到 Exchange Online(无任何依赖项)
问题描述
我想使用 PowerShell 和现代身份验证连接到 Exchange Online,而不依赖于任何模块或 dll。
有一个模块可用于 Exchange Online 的现代身份验证,它依赖于 CreateEXOPSSession.ps1 和 Microsoft.Exchange.Management.ExoPowerShellModule.dll,我已经反编译了后者,发现它会生成一个访问令牌,如下所示:
TokenInformation accessToken = TokenProviderFactory.Instance.CreateTokenProvider(new TokenProviderContext(authType, "a0c73c16-a7e3-4564-9a95-2bdf47383716", this.AzureADAuthorizationEndpointUri, acquireTokenEndpoint, this.UserPrincipalName, this.Credential, clientAppRedirectUri, (Action<string>) (s => this.WriteWarning(s)))).GetAccessToken();
我想在 PowerShell 中以相同的方式请求访问令牌,但我似乎无法获得正确的身份验证上下文和检索访问令牌的方法。
有任何想法吗?
解决方案
您必须具有 MSOL 连接并创建与 EXO 的远程会话才能使用 EXO cmdlet。没有解决方法。
存在依赖性是有原因的。MSOL / Azure / O365 的后端管道符合它的预期,绕过它只会让你陷入非常令人沮丧/令人毛骨悚然的活动。
该令牌是 Azure AD,因为 MA/ADAL 要求您拥有 Azure AD Premium 许可证。MA 需要使用 ADAL API/DLL。这就像要求在不使用 API/DLL 的情况下以编程方式连接并使用 Exchange 本地 EAS/EWS 服务,这也不是一回事。
所以,不管你怎么看,都会有依赖关系,如下所述。所以,如果你认真对待这项工作,你需要真正深入了解 MA 的真正含义以及它是如何工作的。此外,必须已在O365和Azure中的 ADAL MFA 设置中为您和用户启用 MFA 。
现代身份验证——它是什么? 现代身份验证将基于 Active Directory 身份验证库 (ADAL) 的登录引入到跨平台的 Office 客户端应用程序。
MS PowerShellGallery.com 上还有一个 ADAL 模块。
Microsoft.ADAL.PowerShell 1.12 适用于 PowerShell 的 ADAL 模块 https://www.powershellgallery.com/packages/Microsoft.ADAL.PowerShell/1.12
函数 Get-ADALAccessToken Clear-ADALAccessTokenCache
Microsoft.ADAL.Powershell ``` ####Example 1 This example acquire accesstoken by using RedirectUri from contoso.onmicrosoft.com Azure Active Directory for PowerBI service. It will only prompt you to sign in for the first time, or when cache is expired.
Get-ADALAccessToken -AuthorityName contoso.onmicrosoft.com `
-ClientId 8f710b23-d3ea-4dd3-8a0e-c5958a6bc16d `
-ResourceId https://analysis.windows.net/powerbi/api `
-RedirectUri "http://yourredirecturi.local"
另请参阅: Azure-AD-Authentication-with-PowerShell-and-ADAL
这是一组非常简单的 PowerShell 脚本,允许您使用 ADAL 通过 Azure Active Directory 获取访问令牌。
还有这个... ADAL 和 PowerShell
推荐阅读
- python - 如何在 query_entities 上使用过滤器
- python - 熊猫根据条件反转数字
- r - R:根据不同列的顺序重新排序列
- javascript - 如何将对象数据数组转换为更有意义的嵌套对象和数组结构?
- vue.js - 收到错误“无法编译模块未找到:错误:无法解析'babel-loader”
- java - GET请求后Google Tasks API“需要登录”
- c++11 - 如何将分区问题建模为动态规划问题?
- laravel - 在 laravel 中应用 postgis 查询得到 ErrorException (E_NOTICE) 数组到字符串的转换
- windows - 具有提升权限的 Windows 核心运行命令
- wix - 使用 WiX 工具集构建的控制面板中的卸载程序问题