Azure AD从身份验证结果对象获取访问令牌

It'*_*rap 5 c# azure adal

我是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"));
Run Code Online (Sandbox Code Playgroud)

现在ADAL中没有这样的方法.有我试过的异步版本,但采用不同的参数

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

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

string authHeader = ar.CreateAuthorizationHeader();
Run Code Online (Sandbox Code Playgroud)

错误是在ADAL中对于ar对象没有这样的方法.所以我跳到本教程,因为他也使用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).....
Run Code Online (Sandbox Code Playgroud)

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

yon*_*sha 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;
Run Code Online (Sandbox Code Playgroud)

或者,为了让你的代码真正运行 async,你可以将 'async' 添加到方法签名中并执行以下操作:

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;
Run Code Online (Sandbox Code Playgroud)