Как изменить пароль пользователя с помощью Microsoft Graph API - PullRequest
0 голосов
/ 07 ноября 2019

Я пишу некое приложение для командной строки passwd, чтобы изменить пароль учетной записи Azure. Что-то вроде этого:

> passwd someuser Passw*rd1

После прочтения всей документации у меня создано приложение на портале Azure со всеми необходимыми разрешениями, и я собираюсь получить разрешение приложения непосредственно перед получением доступа. токен.

Проблема в том, что вместо получения кода авторизации мне возвращается вызов для https://login.microsoftonline.com/<tenantName>/oauth2/v2.0/authorize - HTML-страница.

Насколько я понимаю, эта страница должна даватьзарегистрированный пользователь может делегировать необходимые разрешения, но это команда, которую должен использовать пользователь с правами администратора. На самом деле, в данный момент нет зарегистрированного пользователя.

Что мне не хватает?

Ответы [ 2 ]

1 голос
/ 13 ноября 2019

Существует пример кода для сброса пароля пользователя.

$tennantid        = ''         
$SubscriptionId   = ''         
$ApplicationID    = ''         
$ApplicationKey   = ''
$TokenEndpoint = {https://login.windows.net/{0}/oauth2/token} -f $tennantid 
$ARMResource = "https://graph.microsoft.com";

$Body = @{
        'resource'= $ARMResource
        'client_id' = $ApplicationID
        'grant_type' = 'client_credentials'
        'client_secret' = $ApplicationKey
        'scope' = 'https%3A%2F%2Fgraph.microsoft.com%2FDirectory.AccessAsUser.All'
}

$params = @{
    ContentType = 'application/x-www-form-urlencoded'
    Headers = @{'accept'='application/json'}
    Body = $Body
    Method = 'Post'
    URI = $TokenEndpoint
}

$token = Invoke-RestMethod @params

$headers = @{}
$headers.Add("authorization","Bearer $($Token.access_token)")
$ResetPwd = @{
    "passwordProfile" = @{
        "forceChangePasswordNextSignIn" = "false"
        "password" = "Test123456!"
    }
} | ConvertTo-Json
Invoke-RestMethod -Headers $headers -Method Patch -Uri "https://graph.microsoft.com/beta/users/$($respons.id)" -ContentType "application/json" -Body $ResetPwd

Затем использовал это, и код выше работает.

$servicePrincipal = Get-MsolServicePrincipal -ServicePrincipalName ServicePrincipalName
$roleId = (Get-MsolRole -RoleName "Company Administrator").ObjectId
Add-MsolRoleMember -RoleObjectId $roleId -RoleMemberObjectId $servicePrincipal.ObjectId -RoleMemberType servicePrincipal

Надеюсь, эта помощь.

0 голосов
/ 08 ноября 2019

Где вы называете конечную точку /authorize?

Вы можете позвонить так в браузере и войти в систему со своей учетной записью:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&state=12345

Тогда вы получите "код »в адресной строке. Используйте этот код для запроса токена доступа:

POST /{tenant}/oauth2/v2.0/token HTTP/1.1

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh

Подробнее см. Запрос кода авторизации и Запрос токена доступа .

...