0

Я использую новую предварительную версию модуля Azure AD PS. Я пытаюсь подключиться с помощью нового параметра маркер доступа:«Неожиданная ошибка», соединяющая Azure AD с Connect-MsolService -AccessToken

Connect-MsolService - AccessToken ey... 

Но я получаю «Непредвиденная ошибка» назад.

Connect-MsolService : An unexpected error occurred. 
At line:1 char:1 
+ Connect-MsolService -AccessToken eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1 ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : OperationStopped: (:) [Connect-MsolService], MicrosoftOnlineException 
+ FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.InvalidHeaderException,Microsoft.Online.Admin 
istration.Automation.ConnectMsolService 

Connect-MsolService : Exception of type 'Microsoft.Online.Administration.Automation.MicrosoftOnlineException' was 
thrown. 
At line:1 char:1 
+ Connect-MsolService -AccessToken eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1 ... 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : OperationStopped: (:) [Connect-MsolService], MicrosoftOnlineException 
+ FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.MicrosoftOnlineException,Microsoft.Online.Adm 
inistration.Automation.ConnectMsolService 

Я знаю, что маркер доступа, я использую это хорошо, потому что я могу использовать его для вызова API Graph из Почтальон. Кто-нибудь получил это, чтобы работать?

Edit: Не уверен, что причины для downvote, но только, чтобы показать, что я сделал свою домашнюю работу, вот запрос/ответ, что модуль PS делает за кулисами, захваченных с трассой Скрипача. Он содержит полезное сообщение «Недопустимый заголовок идентификатора пользователя».

Запрос

POST https://provisioningapi.microsoftonline.com/provisioningwebservice.svc HTTP/1.1 

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
    <s:Header> 
    <a:Action s:mustUnderstand="1">http://provisioning.microsoftonline.com/IProvisioningWebService/MsolConnect</a:Action> 
    <a:MessageID>urn:uuid:df0e35bd-ef05-48cd-a623-a1134b0b2ed6</a:MessageID> 
    <a:ReplyTo> 
     <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
    </a:ReplyTo> 
    <UserIdentityHeader xmlns="http://provisioning.microsoftonline.com/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <BearerToken xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService">Bearer ey...</BearerToken> 
     <LiveToken i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService"/> 
    </UserIdentityHeader> 
    <ClientVersionHeader xmlns="http://provisioning.microsoftonline.com/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <ClientId xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService">50afce61-c917-435b-8c6d-60aa5a8b8aa7</ClientId> 
     <Version xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService">1.1.8806.11</Version> 
    </ClientVersionHeader> 
    <ContractVersionHeader xmlns="http://becwebservice.microsoftonline.com/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <BecVersion xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService">Version32</BecVersion> 
    </ContractVersionHeader> 
    <TrackingHeader xmlns="http://becwebservice.microsoftonline.com/">bf71f0c6-add7-4046-9209-bfd584ca3c28</TrackingHeader> 
    <a:To s:mustUnderstand="1">https://provisioningapi.microsoftonline.com/provisioningwebservice.svc</a:To> 
    </s:Header> 
    <s:Body> 
    <MsolConnect xmlns="http://provisioning.microsoftonline.com/"> 
     <request xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <b:BecVersion>Version4</b:BecVersion> 
     <b:TenantId i:nil="true"/> 
     <b:VerifiedDomain i:nil="true"/> 
     </request> 
    </MsolConnect> 
    </s:Body> 
</s:Envelope> 

Response

HTTP/1.1 500 Internal Server Error 

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
    <s:Header> 
    <a:Action s:mustUnderstand="1">http://provisioning.microsoftonline.com/IProvisioningWebService/MsolConnectInvalidHeaderExceptionFault</a:Action> 
    <a:RelatesTo>urn:uuid:df0e35bd-ef05-48cd-a623-a1134b0b2ed6</a:RelatesTo> 
    </s:Header> 
    <s:Body> 
    <s:Fault> 
     <s:Code> 
     <s:Value>s:Sender</s:Value> 
     </s:Code> 
     <s:Reason> 
     <s:Text xml:lang="en-US">The creator of this fault did not specify a Reason.</s:Text> 
     </s:Reason> 
     <s:Detail> 
     <InvalidHeaderException xmlns="http://schemas.datacontract.org/2004/07/Microsoft.Online.Administration.WebService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <HelpLink i:nil="true"/> 
      <Message>The user identity header is invalid.</Message> 
      <OperationId i:nil="true"/> 
      <Source>Microsoft.Online.Administration.PublicBecWebService</Source> 
      <StackTrace> at Microsoft.Online.Administration.WebService.BecWebServiceAuthenticationManager.ValidateJwtTokenV2(String bearerToken) in x:\bt\533229\repo\src\dev\om\administration\publicbecwebservice\BecWebServiceAuthenticationManager.cs:line 371&#xD; 
    at Microsoft.Online.Administration.WebService.BecWebServiceAuthenticationManager.CheckAccessCore(OperationContext operationContext) in x:\bt\533229\repo\src\dev\om\administration\publicbecwebservice\BecWebServiceAuthenticationManager.cs:line 723</StackTrace> 
     </InvalidHeaderException> 
     </s:Detail> 
    </s:Fault> 
    </s:Body> 
</s:Envelope> 

Вот как я получить маркер доступа. Я использую поток учетных данных клиента, так как в конечном итоге моя цель - запустить это с помощью Azure Automation.

$clientId = "20bc779d-0edb-4a00-becf-xxx" 
$redirectUri = new-object System.Uri("urn:ietf:wg:oauth:2.0:oob") 
$resourceId = "https://graph.windows.net" 
$authority = "https://login.windows.net/mydirectory.onmicrosoft.com" 
$key = ConvertTo-SecureString $keyFromAzurePortal -AsPlainText -Force 
$cred = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential ($clientId, $key) 

$authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext($authority) 
$authResult = $authContext.AcquireToken($resourceId, $cred) 

ответ

1

Я не смог повторить вашу проблему. Позвольте мне сказать вам, что я сделал, чтобы получить его работу:

я впервые получил маркер доступа для нативного клиента приложения ориентации на Graph API:

$clientId = "<GUID>"; 
$tenantId = "<tenant>.onmicrosoft.com"; 
$resourceId = "https://graph.windows.net" 
$redirectUri = new-object System.Uri("urn:ietf:wg:oauth:2.0:oob") 
$login = "https://login.microsoftonline.com" 

$authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext("{0}/{1}" -f $login,$tenantId); 
$authenticationResult = $authContext.AcquireToken($resourceId,$clientID,$redirectUri); 
$token = $authenticationResult.AccessToken 

Тогда я использовал этот маркер в PowerShell:

PS C:\Users\shtabriz> Connect-MsolService -AccessToken eyJ0eXAiOiJKV1QiLCJ... 
PS C:\Users\shtabriz> Get-MsolUser 

UserPrincipalName          DisplayName  isLicensed 
-----------------          -----------  ---------- 
[email protected]      TestMe   False 
shtabriz_microsoft.com#EXT#@shawntest.onmicrosoft.com Shawn Tabrizi  False 
[email protected]      ShawnTabriziAdmin False 
[email protected]      Alex Wu   False 
[email protected]     Language   False 
[email protected]    Language Portal False 

Какой токен доступа вы получаете? Не могли бы вы поделиться им? Или, по крайней мере, JWT-декомпилированная версия без подписи?

Если вы хотите, чтобы принять это в другом месте, не стесняйтесь обратиться к нам в

[email protected]

Пожалуйста, включите файлы журналов, найденные здесь:

C: \ Users [ youralias] \ AppData \ Local \ Microsoft \ Office365 \ Powershell

+0

Хм, я думаю, что мое приложение определяется как веб-приложение, а не родное приложение. Будет ли это иметь значение? Я попробую его с родным приложением. – BenV

+0

Я разрабатываю скрипт, который будет запускаться из Azure Automation, поэтому я использую поток учетных данных клиента для получения токена доступа. Собственные приложения не имеют ключей и не могут выполнять клиентский учетный поток, поэтому мне нужно придерживаться настройки веб-приложения в AAD. Я обновил вопрос с помощью команд, которые я использую, чтобы получить токен. – BenV

+0

Также я попытался отправить адрес электронной почты в ответ, и он продолжает подпрыгивать. – BenV

Смежные вопросы