Изменить мой профиль с помощью API-интерфейса Azure AD Graph - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу разрешить пользователю изменять атрибуты своего профиля, такие как страна, город, адрес электронной почты и т. Д., Из моего приложения с помощью API-интерфейса Azure AD Graph.В настоящее время используется следующий код

IUser CurrentUser = await activeDirectoryClient.Me.ExecuteAsync();
CurrentUser.City = "SomeCity";
await CurrentUser.UpdateAsync();  

Этот код вызывает исключение "Недостаточно прав для завершения операции".Но я разрешил все разрешения API Azure AD и Graph API, как показано на изображении ниже
enter image description here

Startup.Auth.cs Code для аутентификации пользователя:

app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = Authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications()
                {  
                    // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                    AuthorizationCodeReceived = async (context) =>
                     {
                             var code = context.Code;
                             //After token download, Set the token download flag
                             HttpContext.Current.Session["NewTokenDownloadFlag"] = true;  
                             ClientCredential credential = new ClientCredential(clientId, appKey);

                             string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(System.IdentityModel.Claims.ClaimTypes.NameIdentifier).Value;

                             AuthenticationContext authContext = new AuthenticationContext(Authority, new ADALTokenCache(signedInUserID));

                             AuthenticationResult authenticationResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
                                code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceId);

                     }
                }
            });

Код для получения токена доступа:

public async Task<string> GetTokenForApplication()
    {

        string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
        string tenantID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;
        string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
        // get a token for the Graph without triggering any user interaction (from the cache, via multi-resource refresh token, etc)
        ClientCredential clientcred = new ClientCredential(clientId, appKey);
        // initialize AuthenticationContext with the token cache of the currently signed in user, as kept in the app's database
        AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance + tenantID, new ADALTokenCache(signedInUserID));
        AuthenticationResult authenticationResult = await authenticationContext.AcquireTokenSilentAsync(graphResourceID, clientcred, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
        return authenticationResult.AccessToken;
    }

Примечание. Если назначить «Роль администрирования пользователя» из ролей Каталога, то этот код работает, и пользователь может обновить свой профиль, но эта роль активирована.ему / ей, чтобы изменить профиль любого другого пользователя, что я не хочу позволять.Буду признателен за любую помощь.

Примечание: для смены пароля я использую следующий код, и этот код работает нормально с теми же разрешениями.

await activeDirectoryClient.Me.ChangePasswordAsync("Old_Pwd", "New_Pwd");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...