Azure AD ADAuthenticationError 15 - unauthorized_client - 此API版本不支持应用程序

时间:2016-03-15 09:08:33

标签: azure authentication azure-active-directory adal

我需要注册我的应用才能使用Outlook Calendar API。我在这里创建了应用:https://apps.dev.microsoft.com。我有应用程序ID和重定向URI。然后我使用以下方法获取令牌:

[self.context acquireTokenWithResource:resourceID
                              clientId:clientID
                           redirectUri:redirectURI
                       completionBlock:^(ADAuthenticationResult *result) {
                           if (result.status !=AD_SUCCEEDED){
                               completion(result.error);
                           }

                           else{
                               self.accessToken = result.accessToken;
                               self.refreshToken = result.tokenCacheStoreItem.refreshToken;
                               self.familyName = result.tokenCacheStoreItem.userInformation.familyName;
                               self.givenName = result.tokenCacheStoreItem.userInformation.givenName;
                               self.userID = result.tokenCacheStoreItem.userInformation.userId;
                               completion(nil);
                           }
                       }];

得到了这个错误:

Error with code: 15 Domain: ADAuthenticationErrorDomain ProtocolCode:unauthorized_client Details:AADSTS70001: Application '***' is not supported for this API version.
Trace ID: c5286e11-9fa9-4ddd-96a4-a29ddd6b416c
Correlation ID: c608d556-729b-4cad-80be-24d85f5558d4
Timestamp: 2016-03-14 13:05:11Z. Inner error details: Error Domain=ADAuthenticationErrorDomain Code=15 "The operation couldn’t be completed. (ADAuthenticationErrorDomain error 15.)"

请帮我正确注册我的应用

更新: @dstrockis帮助解决了这个问题。但现在我还有一个: 使用https://cocoapods.org/pods/ADALiOS方法

 [authContext acquireTokenWithResource:resourceId
                             clientId:clientId
                          redirectUri:redirectUri
                      completionBlock:^(ADAuthenticationResult *result) {
    if (AD_SUCCEEDED != result.status){
        // display error on the screen
        [self showError:result.error.errorDetails];
    }
    else{
        completionBlock(result.accessToken);
    }
}];

但ADALiOS库3.0.0-pre3不包含此方法。我试过用

- (void)acquireTokenWithScopes:(NSArray*)scopes
          additionalScopes:(NSArray*)additionalScopes
                  clientId:(NSString*)clientId
               redirectUri:(NSURL*)redirectUri
                identifier:(ADUserIdentifier*)identifier
            promptBehavior:(ADPromptBehavior)promptBehavior
           completionBlock:(ADAuthenticationCallback)completionBlock;

我遇到以下错误:“代码出错:17域:ADAuthenticationErrorDomain ProtocolCode:(null)详细信息:应用程序没有当前的ViewController。内部错误详细信息:错误域= ADAuthenticationErrorDomain代码= 17”操作无法运行完成。 (ADAuthenticationErrorDomain错误17。)“”。

2 个答案:

答案 0 :(得分:1)

您使用的是错误版本的ADALiOS库。要使用v2.0端点(以及在apps.dev.microsoft.com上注册的应用程序),您需要使用ADALiOS库3.0.0-pre3的预览版本。见https://cocoapods.org/pods/ADALiOS。有关v2.0端点的更多信息,请访问aka.ms/aaddevv2。

答案 1 :(得分:0)

有关更新的问题:

如果ADAL找不到您的根视图控制器,您可能需要在调用 acquireTokenWithScopes 之前指定父视图控制器。

,例如,设置

context.parentController = self;

在调用 acquireTokenWithScopes 之前