問題描述
如何通過powershell獲取請求的authtoken (How to obtain authtoken for request via powershell)
我需要向通過 powershell 發出的請求添加授權令牌。在 c# 中,我可以像這樣獲取令牌:
private static string GetAccessToken()
{
AuthenticationContext authContext = new AuthenticationContext(((MyApp)Application.Current).AuthorityAddress);
Task<AuthenticationResult> resultTask = authContext.AcquireTokenAsync(
(myAuthServerAddress,
clientId,
redirectUri,
new Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters(PromptBehavior.Auto, false));
resultTask.Wait();
return resultTask.Result.AccessToken;
}
我將如何在 powershell 中執行此操作?我需要將該令牌添加為標頭:
Authorization: Bearer blahblahblahtokenblahblah
參考解法
方法 1:
Try run the following code in PowerShell:
function Get‑AzureRmCachedAccessToken()
{
$ErrorActionPreference = 'Stop'
if(‑not (Get‑Module AzureRm.Profile)) {
Import‑Module AzureRm.Profile
}
$azureRmProfileModuleVersion = (Get‑Module AzureRm.Profile).Version
# refactoring performed in AzureRm.Profile v3.0 or later
if($azureRmProfileModuleVersion.Major ‑ge 3) {
$azureRmProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
if(‑not $azureRmProfile.Accounts.Count) {
Write‑Error "Ensure you have logged in before calling this function."
}
} else {
# AzureRm.Profile < v3.0
$azureRmProfile = [Microsoft.WindowsAzure.Commands.Common.AzureRmProfileProvider]::Instance.Profile
if(‑not $azureRmProfile.Context.Account.Count) {
Write‑Error "Ensure you have logged in before calling this function."
}
}
$currentAzureContext = Get‑AzureRmContext
$profileClient = New‑Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azureRmProfile)
Write‑Debug ("Getting access token for tenant" + $currentAzureContext.Subscription.TenantId)
$token = $profileClient.AcquireAccessToken($currentAzureContext.Subscription.TenantId)
$token.AccessToken
}
Get‑AzureRmCachedAccessToken
From: https://gallery.technet.microsoft.com/scriptcenter/Easily‑obtain‑AccessToken‑3ba6e593
方法 2:
You can do like this.
$bearerAuthValue = "Bearer {token}"
$headers = @{ Authorization = $bearerAuthValue }
Invoke Web Request like this
Invoke‑WebRequest ‑uri "https://api.google.com/user" ‑Headers $headers
You can find further info here https://foxdeploy.com/2015/11/02/using‑powershell‑and‑oauth/