无法生成针对Entra ID验证服务主体的令牌,求解决方向
问题
我正在使用Microsoft Entra ID(Azure AD)对Microsoft Translator服务进行身份验证,目前卡在生成令牌的步骤。
重要提示:我的翻译服务实例已禁用基于密钥的身份验证,因此参考官方文档中的PowerShell示例请求令牌,但文档使用的ADAL模块已过时,执行脚本后无报错,但$token返回为空。
执行的脚本如下:
Install-Module -Name ADAL.PS Import-Module -Name ADAL.PS $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList "https://login.windows.net/<TENANT_ID>" $secureSecretObject = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.SecureClientSecret" -ArgumentList $SecureStringPassword $clientCredential = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential" -ArgumentList $app.ApplicationId, $secureSecretObject $token=$authContext.AcquireTokenAsync("https://cognitiveservices.azure.com/", $clientCredential).Result $token
我已填写了已分配角色的服务主体信息,但结果为空。
解决方案
- 替换过时的ADAL模块为MSAL.PS:ADAL已被微软弃用,兼容性问题可能导致令牌获取失败,先安装并导入最新的MSAL模块:
Install-Module -Name MSAL.PS -Force Import-Module MSAL.PS - 使用MSAL重新编写令牌请求脚本:
# 替换为你的实际参数 $tenantId = "<你的租户ID>" $clientId = "<服务主体的应用ID>" $clientSecret = ConvertTo-SecureString "<服务主体的客户端密钥>" -AsPlainText -Force $scope = "https://cognitiveservices.azure.com/.default" # 获取令牌 $tokenResult = Get-MsalToken -TenantId $tenantId -ClientId $clientId -ClientSecret $clientSecret -Scope $scope # 输出访问令牌 $tokenResult.AccessToken - 验证服务主体权限:确保服务主体已被分配认知服务用户或认知服务参与者角色,且角色作用域明确指向你的Translator服务实例(避免仅分配到订阅级导致权限不匹配)。
- 核对参数准确性:确认租户ID、客户端ID、客户端密钥无拼写错误或多余空格;
Scope必须包含.default后缀,这是客户端凭据流必填的格式。 - 捕获错误细节:若问题仍存在,添加错误捕获逻辑排查具体原因:
try { $tokenResult = Get-MsalToken -TenantId $tenantId -ClientId $clientId -ClientSecret $clientSecret -Scope $scope -ErrorAction Stop Write-Host "令牌获取成功" } catch { Write-Error "具体错误: $_" }
内容的提问来源于stack exchange,提问作者lbpoundz
相关产品推荐
相关产品推荐

