如何通过 Microsoft-adal-angular6 库获取正确的不记名令牌?
How to get correct bearer token through Microsoft-adal-angular6 library?
我正在尝试从 Azure 资源中获取数据 API:https://management.azure.com/subscriptions/%7BsubscriptionId%7D/tagNames?api-version=2018-05-01
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { MsAdalAngular6Service } from 'microsoft-adal-angular6';
@Injectable({
providedIn: 'root'
})
export class AzureApiService {
httpOptions = {
headers: new HttpHeaders({
'Authorization': 'Bearer ' + this.adalSvc.accessToken,
//'Access-Control-Allow-Origin' : '*'
})}
azure_url = "https://management.azure.com/subscriptions/xxxxx-9d71-xxxx-8f20-xxxxxx/tagNames?api-version=2018-05-01";
constructor(private http: HttpClient, private adalSvc: MsAdalAngular6Service) { }
getTags(){
console.log(this.adalSvc.accessToken);
return this.http.get(this.azure_url, this.httpOptions).subscribe(
result => {
console.log(result)
},
error => {
console.log(error)
}
)
}
但是我收到了这个错误:
error="invalid_token", error_description="The access token is from wrong audience or resource.
"
在 AppComponent 中,我可以通过
登录并获得身份验证并接收令牌
constructor(private adalSvc: MsAdalAngular6Service, private ApiService: AzureApiService) {
this.adalSvc.acquireToken('https://management.core.windows.net').subscribe((token: string) => {
console.log(token);
});;
}
但是当我在请求中将它用作不记名令牌时它无效header。
这是我的 App 模块配置:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { HeaderComponent } from './header/header.component';
import { SvgComponent } from './svg/svg.component';
import { DataComponent } from './data/data.component';
import { ListComponent } from './list/list.component';
import { HttpClientModule } from '@angular/common/http';
import { MsAdalAngular6Module, AuthenticationGuard } from 'microsoft-adal-angular6';
import { AppRoutingModule } from './app-routing.module';
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
SvgComponent,
DataComponent,
ListComponent
],
imports: [
BrowserModule,
HttpClientModule,
MsAdalAngular6Module.forRoot({
tenant: 'xxxxx-a23e-xxxxx-ad14-xxxxxx',
clientId: 'xxxxx-65b0-xxxxx-9425-xxxxxxxxx',
redirectUri: window.location.origin,
authority: 'https://login.microsoftonline.com/common/oauth2/authorize',
endpoints: {
},
navigateToLoginRequestUrl: false,
cacheLocation: 'sessionStorage'
}),
AppRoutingModule
],
providers: [AuthenticationGuard],
bootstrap: [AppComponent]
})
export class AppModule { }
此外,当我转到 https://docs.microsoft.com/en-us/rest/api/resources/tags/list 并按 'try it' 时,我可以在这里登录到我们的 azure 帐户并获得一个有效的不记名令牌,我们又可以在代码中使用它访问我们想要的资源。
我认为您需要在获取令牌时指定正确的资源ID。您收到的错误是说您不能使用该令牌访问您请求的资源
this.adalSvc.acquireToken('https://management.core.windows.net').subscribe((token: string) => {
您确定此处输入的值是正确的资源吗?可能值得检查
我正在尝试从 Azure 资源中获取数据 API:https://management.azure.com/subscriptions/%7BsubscriptionId%7D/tagNames?api-version=2018-05-01
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { MsAdalAngular6Service } from 'microsoft-adal-angular6';
@Injectable({
providedIn: 'root'
})
export class AzureApiService {
httpOptions = {
headers: new HttpHeaders({
'Authorization': 'Bearer ' + this.adalSvc.accessToken,
//'Access-Control-Allow-Origin' : '*'
})}
azure_url = "https://management.azure.com/subscriptions/xxxxx-9d71-xxxx-8f20-xxxxxx/tagNames?api-version=2018-05-01";
constructor(private http: HttpClient, private adalSvc: MsAdalAngular6Service) { }
getTags(){
console.log(this.adalSvc.accessToken);
return this.http.get(this.azure_url, this.httpOptions).subscribe(
result => {
console.log(result)
},
error => {
console.log(error)
}
)
}
但是我收到了这个错误:
error="invalid_token", error_description="The access token is from wrong audience or resource.
"
在 AppComponent 中,我可以通过
登录并获得身份验证并接收令牌constructor(private adalSvc: MsAdalAngular6Service, private ApiService: AzureApiService) {
this.adalSvc.acquireToken('https://management.core.windows.net').subscribe((token: string) => {
console.log(token);
});;
}
但是当我在请求中将它用作不记名令牌时它无效header。
这是我的 App 模块配置:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { HeaderComponent } from './header/header.component';
import { SvgComponent } from './svg/svg.component';
import { DataComponent } from './data/data.component';
import { ListComponent } from './list/list.component';
import { HttpClientModule } from '@angular/common/http';
import { MsAdalAngular6Module, AuthenticationGuard } from 'microsoft-adal-angular6';
import { AppRoutingModule } from './app-routing.module';
@NgModule({
declarations: [
AppComponent,
HeaderComponent,
SvgComponent,
DataComponent,
ListComponent
],
imports: [
BrowserModule,
HttpClientModule,
MsAdalAngular6Module.forRoot({
tenant: 'xxxxx-a23e-xxxxx-ad14-xxxxxx',
clientId: 'xxxxx-65b0-xxxxx-9425-xxxxxxxxx',
redirectUri: window.location.origin,
authority: 'https://login.microsoftonline.com/common/oauth2/authorize',
endpoints: {
},
navigateToLoginRequestUrl: false,
cacheLocation: 'sessionStorage'
}),
AppRoutingModule
],
providers: [AuthenticationGuard],
bootstrap: [AppComponent]
})
export class AppModule { }
此外,当我转到 https://docs.microsoft.com/en-us/rest/api/resources/tags/list 并按 'try it' 时,我可以在这里登录到我们的 azure 帐户并获得一个有效的不记名令牌,我们又可以在代码中使用它访问我们想要的资源。
我认为您需要在获取令牌时指定正确的资源ID。您收到的错误是说您不能使用该令牌访问您请求的资源
this.adalSvc.acquireToken('https://management.core.windows.net').subscribe((token: string) => {
您确定此处输入的值是正确的资源吗?可能值得检查