source

그래프 API - 권한이 부족하여 작업을 완료할 수 없습니다.

itover 2023. 4. 27. 22:12
반응형

그래프 API - 권한이 부족하여 작업을 완료할 수 없습니다.

Graph Service Client에 액세스할 때 다음 오류가 발생합니다.

: 권한 부여_
파일: 할 수 .권한이 부족하여 작업을 완료할 수 없습니다.

이 오류를 조사한 후 가장 일반적인 해결책은 API에 대한 권한을 설정하는 것이었습니다.이 작업은 이미 수행되었으며 기본/전체 프로필을 읽을 수 있는 권한이 있습니다.

API를 삭제하고 다시 추가했습니다.

는 나의 아래나코다에 입니다.AzureAuthenticationProvider에서 IAuthenticationProvider:

public class AzureAuthenticationProvider : IAuthenticationProvider
{
    private string _azureDomain = "myDevDom.onmicrosoft.com";

    public async Task AuthenticateRequestAsync(HttpRequestMessage request)
    {
        try
        {
            string clientId = "2b823c67-1b0d-4a10-a9e1-737142516f5q";
            string clientSecret = "xxxxxx";

            AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");

            ClientCredential credentials = new ClientCredential(clientId, clientSecret);

            AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credentials);

            request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
        }
        catch (Exception ex)
        {
        }
    }
}

클라이언트 비밀번호를 잘못된 ID로 변경하려고 했는데 오류가 발생하여 클라이언트 키가 정확합니다.또한 액세스 토큰을 변경하여 액세스 토큰이 유효한지 확인하려고 시도했지만 오류가 반환됩니다.

위 코드는 정상적으로 작동하는 것 같습니다.

다음은 Azure AD에 액세스하려는 코드입니다.

public async Task<IGraphServiceUsersCollectionPage> GetUsersByLastName(string lastname)  
{
    GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
    string filter = String.Format("startswith(surname, '{0}')", lastname);
    IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().Filter(filter).GetAsync(); //Fails on this line
    return users;
}

zureAD 권한 속성

아래 단계를 참조하십시오.

  1. 당신의 스크린샷에서, 당신이 허락한 것처럼 보입니다.Read and write directory data에대응용프권한램그에 대한 신청 Windows Azure Active Directory(zure ad graph api). 당신은 마이크로소프트 그래프(https://graph.microsoft.com/) 를 사용하고 있기 때문에, 당신은 애플리케이션 권한을 부여해야 합니다.Microsoft Graph: 여기에 이미지 설명 입력

  2. 이므로 AAD를 내 을 부여할 수 .Grant permission위의 스크린샷에 표시된 버튼.

  3. 그런 다음 코드(토큰을 가져오는 클라이언트 자격 증명 흐름)를 사용하여 사용자 정보를 쿼리할 수 있습니다.만약 당신이 aure 광고에 의해 발행된 액세스 토큰에서 클레임을 확인한다면, 당신은 찾을 수 있을 것입니다.Directory.Read.All에대허가한의 roles주장하다.

권한 부여 모든 사용자 계정에 대해 "권한 부여"를 누른 후 "예"를 누릅니다.

이 문제를 해결하는 열쇠는 힌트였습니다.

B2C 테넌트에서 Graph API를 사용하려면 Azure AD B2C의 Applications 메뉴가 아닌 Azure Portal의 일반 App Registrations 메뉴(모든 서비스 및 기본적으로 즐겨찾기에 표시되지 않음)를 사용하여 전용 애플리케이션을 등록해야 합니다.Azure AD B2C의 Applications(애플리케이션) 메뉴에서 등록한 기존 B2C 애플리케이션은 재사용할 수 없습니다.

ADB2C API 액세스 데모 페이지에서 자세히 알아보기

저의 경우, 사용자 삭제가 작동하지 않았습니다.저는 아래 단계를 밟았고 그것은 저에게 효과가 나타나기 시작했습니다.

에 가다Azure Active Directory > Roles and administrators > Click on 'User administrator' > click on '+ Add assignment' to add your app(즉, AAD Graph REST API는 Azure Active Directory입니다.)

누군가에게 도움이 되길 바랍니다.

경우에 따라 "위임된 권한" 대신 "응용 프로그램 권한"을 사용하기 때문에 실제 문제가 발생할 수 있습니다.내 응용 프로그램에서 응용 프로그램 권한이 있는 모든 사용자를 나열하려고 했지만 작동하지 않았습니다.위임된 권한으로 전환했을 때 작동했습니다.

일부 빠른 확인은 다음과 같습니다.

  1. Microsoft Graph API 또는 다른 API를 사용하고 있는지 확인합니다.
  2. 위임된 권한 사용
  3. 권한 부여 버튼을 클릭하여 권한을 전파합니다. :)

바라건대, 이것이 누군가에게 도움이 되길 바랍니다.

이 문제를 해결하려면 다음 단계를 수행해야 합니다.

  1. AD > App Registered > 당신의 앱
  2. 필요한 권한 선택
  3. 추가를 클릭하고 Microsoft 그래프를 선택하여 추가합니다.
  4. Microsoft 그래프 선택
  5. 위임된 권한 목록에서 모든 그룹 읽기 및 쓰기를 선택합니다.
  6. 그리고 저장합니다.
  7. Windows Azure Active Directory를 선택하고 모든 응용 프로그램 사용 권한 부여
  8. 구하라

'디렉토리'를 클릭하여 권한을 부여합니다.Read.All/Write'만으로는 부족합니다.

저도 같은 문제에 부딪혔어요.관리자 역할에 서비스 원칙을 추가하여 해결할 수 있습니다.

만약 당신이 최근에 앱을 만든다면, 이것은 Azure AD Powershell을 할 수 있습니다.

$pricinple = Get-AzureADServicePrincipal || Where-Object {$_.DisplayName -eq 'youappname'}

 $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'Company Administrator'}

Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId $pricinple.ObjectId

자세한 내용은 https://learn.microsoft.com/en-us/powershell/module/Azuread/Add-AzureADDirectoryRoleMember?view=azureadps-2.0 를 참조하십시오.

오래 전에 만들어진 응용프로그램이라면 MS 온라인을 사용해야 합니다.참조: https://learn.microsoft.com/en-us/powershell/module/msonline/Add-MsolRoleMember?view=azureadps-1.0

는 사용중을 하고 있습니다.Credentials flow https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow 그리고 내 문제는 설정이었습니다.Delegate PermissionsApplication Permission.

사하지않사얻수없다습니을를용용자를 사용하지 않아서 수 .User.Read.AllApplication Permissions https://learn.microsoft.com/en-us/graph/api/user-get?view=.0&tabs=httphttps ://learn.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http

Application User.Read.All, User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All

Azure Portal -> Active Directory -> App 등록 -> Application 선택 -> API 권한으로 이동합니다.

이제 Add a permission(권한 추가)을 클릭하고 Microsoft Graph(마이크로소프트 그래프)를 선택한 다음 Application Permission(애플리케이션 권한)을 선택하고 User(사용자)를 검색합니다.모두 읽기

이러한 사용 권한을 응용 프로그램에 추가하면 응용 프로그램이 작동합니다.

토큰에 모든 "그룹"(ID, 액세스, SAML)을 추가해야 했습니다.이 설정은 Azure Active Directory 토큰 구성에서 구성할 수 있으며 https://jwt.io/ 을 통해 확인할 수 있습니다.

디렉토리를 제공해야 합니다.앱 레지스터 페이지가 아닌 AD 페이지에서 서비스 주체에게 역할을 읽습니다.여기에 이미지 설명 입력

여기에 이미지 설명 입력

그나저나.msrestazure.azure_active_directory import ServicePrincredentials의 serviceprincipal과 함께 python sdkazure-graphrbac을 사용합니다.

    credential = ServicePrincipalCredentials(ServicePrincipal_APP_ID,ServicePrincipal_SECRET_VALUE,tenant=ServicePrincipal_TENANT_ID,resource="https://graph.windows.net/")
    self.client=GraphRbacManagementClient(credential,TENANT_ID,base_url)

언급URL : https://stackoverflow.com/questions/44323560/graph-api-insufficient-privileges-to-complete-the-operation

반응형