С помощью microsoft-ada-angular6 и microsoft-graph-client, как мне проверить разрешения токена, который я получаю обратно от AAD? - PullRequest
1 голос
/ 04 марта 2020

Я использую рабочий процесс Implicit Grant в Angular с библиотекой microsoft-adal-angular6 для аутентификации пользователя в моем приложении и получения токена для доступа к Microsoft Graph.

Часть аутентификации работает.

И я могу получить токен из AAD через библиотеку. Однако, когда я пытаюсь запросить график через клиента (и через http), я получаю сообщение об ошибке недопустимой аудитории (запрос http немного менее полезен только с 401).

statusCode: 401 
   code: "InvalidAuthenticationToken" 
   message: "Access token validation failure. Invalid audience." 
   requestId: "157c3867-3ac6-41e7-aa79-fbd6cc466c4f" 
   date: Tue Mar 03 2020 23:18:44 GMT-0700 (Mountain Standard Time) {} 
   body: "{"code":"InvalidAuthenticationToken","message":"Access token validation failure. Invalid audience.","innerError":{"request-id":"157c3867-3ac6-41e7-aa79-fbd6cc466c4f","date":"2020-03-03T23:18:44"}}"
    __proto__: Object`

Здесь я настраиваю свой Служба ADAL:

`adalConfig = {
  tenant: AppConfig.settings.aad.tenant,
  clientId: AppConfig.settings.aad.clientId,
  redirectUri: AppConfig.settings.aad.redirectUri,
  endpoints: AppConfig.settings.aad.apiEndpoint,
  navigateToLoginRequestUrl: false,
  cacheLocation: AppConfig.settings.aad.cacheLocation
};`

json:

"aad": {
    "requireAuth": true,
    "apiEndpoint": {
        "https://localhost:44371": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "https://graph.microsoft.com/v1.0/": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  
    },
    "clientId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "resource": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "redirectUri": "http://localhost:4200/frameredirect/",
    "cacheLocation": "sessionStorage",
    "vospEndpoint": "https://localhost:44371",
    "graphEndpoint": "https://graph.microsoft.com/v1.0/",
    "vospAADGroup": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "clientSecret": "",
    "scopes": [
        "GroupMember.Read.All"
    ]
}}`

Мой звонок для получения моего токена для конечной точки графа:

private async getAccessToken(): Promise<string> {
const resource =  this.adalService.GetResourceForEndpoint(AppConfig.settings.aad.graphEndpoint);
let result = await this.adalService.acquireToken(resource).toPromise().then((token:string) => {return token;}).catch(error => {return error;});

if(result) console.log(result);
return result;

А вот мой код для вызова init клиента графа и вызова API:

let graphClient = await Client.init({
  authProvider: async(done) => {
    let token = await this.getAccessToken()
    .catch((reason) => {
      done(reason,null);
    });

    if(token) {
      done(null, token);
    } else {
      done("Could not get an access token", null);
    }
  }
});

let aadGroupId = AppConfig.settings.aad.vospAADGroup;
let loggedInUser = this.adalService.LoggedInUserEmail;

let graphUser2 = await graphClient.api("/users/" + loggedInUser + "/memberOf?").filter("id eq '" + aadGroupId + "'").get().catch(error => {return error});

Слот на Azure был настроен для предоставления следующих областей действия Graph API:

Microsoft Graph (8) 
    Directory.AccessAsUser.all      Delegated       Access directory as the signed in user
    Directory.Read.all              Application     Read directory data
    Group.Read.All                  Delegated       Read all groups
    Group.Read.all                  Application     Read all groups
    User.Read                       Delegated       Sign in and read user profile
    User.Read.All                   Delegated       Read all users' full profiles
    User.Read.All                   Application     Read all users' full profiles
    User.ReadBasic.All              Delegated       Read all users' basic profiles

Мои вызовы на график отклоняется из-за жетона аудитории. Как указать правильную аудиторию и область действия токена, используя оболочку microsoft-adal-angular6 для ADAL. js?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Ошибка проверки токена доступа. Недопустимая аудитория

Эта ошибка обычно возникает из-за неправильной аудитории. Мы можем использовать https://jwt.ms/ для проверки аудитории в токене. Если вы хотите вызвать Microsoft Graph API, ресурс должен быть https://graph.microsoft.com.

Ссылка:

https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#payload -калименты

0 голосов
/ 12 марта 2020

Используя https://jwt.ms (спасибо @TonyJu), я обнаружил, что токен-аудитория ссылалась на clientId моего приложения. Поэтому в моем JSON я изменил ссылку на свою конечную точку на «https://graph.microsoft.com»: «https://graph.microsoft.com»

Это позволило моему перехватчику http получить «ресурс» для конечной точки из хранилища сеанса и получения токена для правильной аудитории.

Похоже, что он мог бы использовать некоторые пояснения в документации microsoft-adal-angular6 . Но, возможно, это просто здравый смысл.

@NgModule({
imports: [
    MsAdalAngular6Module.forRoot({
      tenant: '<YOUR TENANT>',<-------------------------------- ADD
      clientId: '<YOUR CLIENT / APP ID>',<--------------------- ADD
      redirectUri: window.location.origin,
      endpoints: { <------------------------------------------- ADD
        "https://localhost/Api/": "xxx-bae6-4760-b434-xxx",
        ---
        ---
      },
      navigateToLoginRequestUrl: false,
      cacheLocation: '<localStorage / sessionStorage>', <------ ADD
    }),
    ---
    ---
  ],
  ---
  ---
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...