多个登录窗口/在acquireToken()上不断重新提示用户名/密码

时间:2018-01-07 16:29:18

标签: cordova-plugins adal

每次我调用acquireToken时,它都会继续启动AAD登录窗口并提示我输入用户名/密码,即使我已经成功验证并使用了访问令牌来进行API调用。

这是我的代码

Step 1. Call the loadData function from controller
    loadData = (): Rx.IPromise<Array<UserResult>> => {
        var url = this.xxxApiUrl;
        return Http.get<Array<UserResult>>(this._$http, url);
    };

Step -2
export function get<TResult>(http: ng.IHttpService, url: string, 
ignoreLoadingBar: boolean = false, retryCount = 0): Rx.IPromise<TResult> {
    var req: any = {};
    if (ignoreLoadingBar) {
        req.ignoreLoadingBar = ignoreLoadingBar;
    }
    let resObservable = Rx.Observable.create(subscriber => {
        acquireToken(url, (message, token) => {
            req.headers.Authorization = `Bearer ${token}`;
            http.get(url, req)
                .then(res => {
                    subscriber.onNext(res.data);
                    subscriber.onCompleted();
                }, (err) => { alert(JSON.stringify(err)); });
        });
    });
    return resObservable.toPromise();
}

function acquireToken(apiUrl: string, callback) {
    let innerCallback = (res) => callback('', res.accessToken);
    let xConfig= JSON.parse(<any>sessionStorage.getItem('xConfig'));
    window.AuthenticationContext = new 
   window.Microsoft.ADAL.AuthenticationContext
 (xConfig.common.azure.authorityTenant);
    window.AuthenticationContext.tokenCache.readItems().then(items => {
        if (items.length > 0) {
            let authority = items[0].authority;
            window.AuthenticationContext = new 
 window.Microsoft.ADAL.AuthenticationContext(authority);
        }
        let resourceUri = getResourceUri(xConfig, apiUrl);
        window.AuthenticationContext.acquireTokenSilentAsync(resourceUri, 
  xConfig.common.azure.clientId, xConfig.common.azure.redirectUri)
            .then(innerCallback, (err) => {
                window.AuthenticationContext.acquireTokenAsync(resourceUri, 
  xConfig.common.azure.clientId, xConfig.common.azure.redirectUri)
                    .then(innerCallback);
            });
    });
}

1 个答案:

答案 0 :(得分:0)

查看您的代码,看起来您正在使用 common 端点acquireTokenSilentAsync,这是不受支持的。使用acquireTokenSilentAsync

时,请确保使用您的租户ID或名称(如tenant.onmicrosoft.com)而不是 common

有关常见端点的详细信息,请参阅here

相关问题