Я работаю над приложением Angular и net в бэкэнде. вместо того, чтобы создавать таблицу для пользователей, я использую Microsoft Azure для входа в приложение после его восстановления в Azure. На стороне Angular я использую библиотеку 'microsoft-adal-angular6' для подключения к azure и возврата токена, и все в порядке, для большей безопасности я отправляю этот токен на сервер, к которому он также подключен Azure и проверьте этот токен после того, как будут показаны данные, и пока все здесь в порядке, и я получил токен.
НО этот токен не имеет свойства 'groups' с Id, когда у пользователя более 6 групп вместо него токен имеет свойство hasgroups: true. И у меня есть политики на бэкэнде, например, для добавления нового клиента, и когда пользователь имеет более 6 групп, он не может добавить клиента, и ошибка 403 запрещена. Я много пытался найти душу. но я не нашел правильного в моем случае, что я понимаю, и мне нужно вызвать API графа, чтобы привести все группы, но я не нашел никакого реального примера, просто объяснение. Итак, не могли бы вы сказать мне в этом случае, как я могу сделать, чтобы решить эту проблему. вот код, как я подключаюсь к azure из Angular.
Angular:
appModule.ts:
imports: [ MsAdalAngular6Module.forRoot({
tenant: 'tetant Id of the app in Azure',
clientId: 'client Id of the app in Azure',
redirectUri: window.location.origin,
endpoints: {
"http://localhost:4211/": "http://localhost:4211/",
},
navigateToLoginRequestUrl: false,
cacheLocation: '<localStorage / sessionStorage>', }),
Angular Iterceptor выглядит так :
класс экспорта Interceptor реализует HttpInterceptor {
initialToken; headers = new HttpHeaders ({'Content-Type': 'application / json'});
конструктор (приватный adalSv c: MsAdalAngular6Service, приватный http:HttpClient, приватный маршрутизатор: маршрутизатор)
{
this.initialToken = sessionStorage.getItem('adal.idtoken') ;
console.log( "initialToken " , this.initialToken);
}
Перехват (запрос: HttpRequest, следующий: HttpHandler): Наблюдаемый> {
if (this.initialToken) {
request = request.clone({
setHeaders: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.initialToken}`
}
});
}
return next.handle( request ).pipe( tap(() => {},
(err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status !== 401) {
return;
}
this.router.navigate(['']);
}
}))
}
маркер проверки обратной стороны:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
sharedOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Audience = "clientId";
options.Authority = "https://login.microsoftonline.com/tetantId/";
options.RequireHttpsMetadata = false;
options.Events = new JwtBearerEvents()
{
OnTokenValidated = context =>
{
return Task.CompletedTask;
}
};
});
Спасибо за помощь.