0

我有一个获取 OAuth 2 令牌并组装标头的函数;以及使用标头向 Microsoft Graph 发出各种请求的其他人。

组装头部的函数有两种方法:一种是与设备代码流交互;另一种是与设备代码流交互。另一个与用户名和密码流不交互。这两种方法都会产生一个看起来相同的标题。令牌对象和标头对象在这两种情况下都是相同类型的对象。

但是,当标头用于另一个 GET 函数时,该函数在交互情况下会失败,而在非交互情况下会成功。错误是:“无法将 'System.Object[]' 转换为参数 'Headers' 所需的类型 'System.Collections.IDictionary'。”

头函数返回的对象在失败的情况下是一个数组(对象,基类型:系统数组)。成功案例中是一个哈希表(hashtable, base type: system object)。即使在函数内部,令牌和标头是相同的类型。Token 是 System.Management.Automation.PSCustomObject,header 是 hashtable。

组装标题的代码是:$authHeader = @{ 'Authorization' = "Bearer $( $tokenResponse.access_token)" 'Content-Type' = "application/json" 'ExpiresOn' = $( $tokenResponse.expires_in)

访问令牌都是包含在令牌响应中的长字符串。它们看起来很相似,并且在 jwt.io 上都可以解码。

任何想法为什么看起来相同的两个标题会是不同的对象类型,以及如何将失败的标题转换为 IDictionary 格式?

4

1 回答 1

0

找到了。交互式身份验证中的输入提示在输出中添加了一个空字符串。解决方案是添加| Out-Null到提示中。

于 2020-03-28T08:26:37.553 回答