Azure AD - Oauth2 返回无效的身份验证令牌

Azure AD - Oauth2 returning Invalid Authentication Token

嗨,我对 azure ad 很陌生,正在尝试使用 Oauth2 来使用 GraphAPI。

我目前有我的代码:

static let tenant = "tenant.com"
static let clientId = "22d31baa-5acf-4324-8ac1-02f0021g4f56"
static let redirectURI = URL.init(string: "test://com.test.est")
static let authority = "https://login.microsoftonline.com/\(tenant)/oauth2/authorize"
static let resourceId = "https://graph.microsoft.com"


var authContext: ADAuthenticationContext!

func getAuth(){
    var error: ADAuthenticationError? = nil
    authContext = ADAuthenticationContext(authority: Authentication.authority, error: &error)
    authContext.acquireToken(withResource: Authentication.resourceId, clientId: Authentication.clientId, redirectUri: Authentication.redirectURI, completionBlock: {(result:ADAuthenticationResult!) in
        if(result.accessToken == nil){
            //Token acquisition failed
            print("Failed receving Token")
        }else{
            //Toekn acquisition succeeded
            let headers: HTTPHeaders = ["Authorization":"Bearer \(result.tokenCacheStoreItem.accessToken)"]

            Alamofire.request("\(Authentication.resourceId)/me", headers: headers).responseJSON(completionHandler: { response in
                print(response)
            })

        }
    })
}

执行此代码时,我得到结果:

SUCCESS: {
error =     {
    code = InvalidAuthenticationToken;
    innerError =         {
        date = "2017-05-05T22:44:39";
        "request-id" = "22d31baa-5acf-4324-8ac1-02f0021g4f56";
    };
    message = "CompactToken parsing failed with error code: -2147184105";
};

}

错误信息打印在alamofire.request里面。 我觉得我的权限被搞乱了,因为当我擦除 oauth2 部分时,它仍然 returns 相同的结果。我再次尝试研究 oauth2,但如果我的代码中出现任何错误,请告诉我。 非常感谢

终于知道怎么管理了。

import Foundation
import ADALiOS
import Alamofire


class Authentication{
let tenant: String
let clientId: String
let redirectURI: URL
let authority: String
let resourceId: String

init(){
    tenant = "tenant"
    clientId = "client"
    redirectURI = URL.init(string: "uri")!
    authority = "https://login.microsoftonline.com/\(tenant)/authorize?client_id=\(clientId)&response_type=code&redirect_uri=\(redirectURI)&response_mode=query"
    resourceId = "https://graph.microsoft.com"
}

private var authContext: ADAuthenticationContext!

private var token: String? = nil
var response: DataResponse<Any>? = nil


func authorize(){

    var error: ADAuthenticationError? = nil
    authContext = ADAuthenticationContext(authority: authority, error: &error)
    authContext.acquireToken(withResource: resourceId, clientId: clientId, redirectUri: redirectURI, completionBlock: {(result:ADAuthenticationResult!) in
        if(result.accessToken == nil){
            //Token acquisition failed
            print("Failed receving Authorizing Token")
        }else{
            //Token acquisition succeeded
            let headers = [
                "Content-Type":"application/json",
                "Accept":"application/json, text/plain, */*",
                "Authorization":"Bearer \(result.tokenCacheStoreItem.accessToken!)"
            ]
            Alamofire.request("https://graph.microsoft.com/beta/me/", headers: headers).responseJSON(completionHandler: { response in
                self.response = response
            })
        }
    })
}

基本上,我必须添加一些 headers 并使用测试版。如果我使用非测试版,它会 returns 无效版本错误。