【问题标题】:Azure AD Get access token from authentication result objectAzure AD 从身份验证结果对象获取访问令牌
【发布时间】:2016-08-18 01:36:20
【问题描述】:

我是 Azure AD 的新手,正在尝试使用由 AD 保护的 api。我已经成功创建并保护了 api,但是在我的 windows 窗体应用程序中很难使用它。我已经尝试过Link 的文档,但是在这一行中出现编译时错误

AuthenticationResult ar =
ac.AcquireToken("https://cloudidentity.net/WindowsAzureADWebAPITest",
"a4836f83-0f69-48ed-aa2b-88d0aed69652",
new Uri("https://cloudidentity.net/myWebAPItestclient"));

现在 ADAL 中没有这种方法。我尝试了异步版本,但采用不同的参数

AuthenticationResult ar =
ac.AcquireTokenAsync("https://cloudidentity.net/WindowsAzureADWebAPITest",
"a4836f83-0f69-48ed-aa2b-88d0aed69652",
new Uri("https://cloudidentity.net/myWebAPItestclient"), IPlatformParameters);

除了其他信息,它还需要 IPlatformParameters 对象,我对此一无所知。我试图传递 null 并继续,但是这行有错误

string authHeader = ar.CreateAuthorizationHeader();

错误是在 ADAL 中对于 ar 对象没有这样的方法。所以我跳到这个 tutorial,因为他也在使用 Windows 窗体应用程序。他写的代码是

Task<AuthenticationResult> ar = authContext.AcquireTokenAsync("https://carsforher.onmicrosoft.com/SecuredCars_20160722021100", "2640aca3-a35e-42f8-8f6d-2e5fe1a09df4", new Uri("http://localhost"), null);
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ar.AccessToken).....

但是没有属性作为 ar 对象的 AccessToken。然后我尝试从Azure Documentation 下载示例应用程序,但他们也编写了完全相同的代码,不幸的是这不起作用。我使用的 ADAL 版本是 3.12.0.827。请帮助我弄清楚如何获取访问令牌并使用 api。

【问题讨论】:

    标签: c# azure adal


    【解决方案1】:

    您错误地使用 AcquireTokenAsync:AcquireTokenAsync 返回一个任务,而不是一个 AuthenticationResult 对象,因此方法 'CreateAuthorizationHeader' 和属性 'AccessToken' (不是真的)“丢失”。

    您的代码的固定版本是:

    AuthenticationResult ar = ac.AcquireTokenAsync("https://cloudidentity.net/WindowsAzureADWebAPITest",
        "a4836f83-0f69-48ed-aa2b-88d0aed69652",
        new Uri("https://cloudidentity.net/myWebAPItestclient"), IPlatformParameters).Result;
    
    string authHeader = ar.CreateAuthorizationHeader();
    string accessToken = ar.AccessToken;
    

    或者,您的代码将真正运行异步,您可以在方法签名中添加“异步”并执行以下操作:

    AuthenticationResult ar = await ac.AcquireTokenAsync("https://cloudidentity.net/WindowsAzureADWebAPITest",
        "a4836f83-0f69-48ed-aa2b-88d0aed69652",
        new Uri("https://cloudidentity.net/myWebAPItestclient"), IPlatformParameters);
    
    string authHeader = ar.CreateAuthorizationHeader();
    string accessToken = ar.AccessToken;
    

    【讨论】:

      猜你喜欢
      • 2020-01-12
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 2019-05-15
      • 1970-01-01
      • 2020-04-23
      相关资源
      最近更新 更多