Microsoft-Graph - 作为 Azure AD 管理员,您如何为另一个用户获取有效的 access_token

Microsoft-Graph - As an Azure AD Admin how you can get a valid access_token for another user

如果我理解用户 @MarcLaFleur 在这里的回复:Resetting a user's password using Microsoft Graph,如果您是 Azure AD admin 并且想使用 Microsoft Graph API 重置另一个用户的密码,那么您需要为具有 Directory.AccessAsUser.All 权限的用户提供有效的 access_token,然后您可以更新用户的密码配置文件。

问题:使用 Microsoft Graph,作为 Azure AD 管理员,我们如何为另一个用户获取 access_token

我的应用注册的认证页面:

如果您是 Azure AD admin 并且想要使用 Microsoft Graph API 重置另一个用户的密码,您只需要获取管理员帐户本身的令牌,而不是您想要的用户改变。

在这种情况下,您可以使用 auth code flow

1.In 您的 AD 应用程序,添加如下权限 -> 单击 Grant admin consent for xxx 按钮。

2.Login 您的管理员帐户,在浏览器下方显示url。

https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize?
client_id=<client-id>
&response_type=code
&redirect_uri=<redirect_uri>
&response_mode=query
&scope=https://graph.microsoft.com/.default
&state=12345

3.Use获取令牌的代码。

4.Use普通用户修改密码的token


您也可以使用 Microsoft Graph SDK, use Authorization code provider

如下所示:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var user = new User
            {
                PasswordProfile = new PasswordProfile
                {
                    ForceChangePasswordNextSignIn = true,
                    Password = password,
                }
            };

await graphClient.Users[userId]
                   .Request()
                   .UpdateAsync(user);