我用ADALiOS做了很多样品。正如你所知,ADALiOS不断地改变它的实现。因为我是swift的初学者,所以我不知道如何从网上制作样本。
我试过adal 3.0的一个版本(预发行版)。
如您所见,下面的代码是从下载的一个示例中复制的。每个示例都有编译器错误,例如authContext.acquireToken()或acquireTokenwithResource()方法中的“缺少参数标签策略…”或“无法转换ADAuthenticationResult…”,而不管其adal版本如何。有人能帮我吗?
错误消息是关于completionBlock:。。。。
谢谢

authContext.acquireToken(withScopes: [Any](), additionalScopes: [Any](), clientId: clientId, redirectUri: redirectURL, identifier: id!, promptBehavior: prompt, extraQueryParameters: "", completionBlock: <#T##ADAuthenticationCallback!##ADAuthenticationCallback!##(ADAuthenticationResult?) -> Void#>){
        if result.status.value != AD_SUCCEEDED.value {
            // Failed, return error description
            completionHandler(false, result.error.description)
        }
        else {
            // Succeeded, return the acess token
            var token = result.accessToken
            // Initialize the dependency resolver with the logged on context.
            // The dependency resolver is passed to the Outlook library.
            self.dependencyResolver = ADALDependencyResolver(context: authContext, resourceId: self.outlookResource, clientId: self.clientId, redirectUri: self.redirectURL)
            completionHandler(true, token)
        }
    }

最佳答案

我刚刚使用了adal 3.0(预发行版)。在查看示例时,ADALAPI似乎已更改。我找不到acquireTokenwithResource(),因此使用:
acquireToken(其作用域:additionalScopes:clientId:redirectUri:identifier:,promptBehavior:)
我想我最大的问题是没有在这里注册本地应用:https://apps.dev.microsoft.com
在我使用apps.dev.microsoft中的clientId和redirectURI并包含正确的作用域之后,我就能够进行身份验证并获取accessToken。
我的acquireToken是这样的:

 func acquireAuthToken(completion: ((AuthenticationResult) -> Void)?) {

        let identity = ADUserIdentifier(id: "Default email address", type: ADUserIdentifierType(rawValue:1))



        self.context.acquireToken(withScopes: ["User.Read"], additionalScopes: nil, clientId: AppData.sharedInstance?.clientId, redirectUri: URL(string: (AppData.sharedInstance?.redirectUriString)!), identifier: identity, promptBehavior: AD_PROMPT_AUTO) {
            (result) in

            if let handler = completion {
                if result!.status == AD_SUCCEEDED {
                    self.accessToken = result!.token

                    handler(AuthenticationResult.Success)
                }
                else {
                    handler(AuthenticationResult.Failure(result!.error))
                }
            }
        }
    }

上下文只是一个身份验证上下文(权威:ppData.sharedInstance?.authority,.authority,错误:&error)
高温高压

09-12 06:49