Azure AD 从身份验证结果对象中获取访问令牌
Azure AD Get access token from authentication result object
我是 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。
您错误地使用了 AcquireTokenAsync:AcquireTokenAsync returns 一个任务,而不是 AuthenticationResult 对象,因此方法 'CreateAuthorizationHeader' 和 属性 'AccessToken' 是(不是真的)"missing".
您的代码的固定版本为:
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;
或 或者,因此您的代码将真正 运行 异步 ,您可以将 '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;
我是 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。
您错误地使用了 AcquireTokenAsync:AcquireTokenAsync returns 一个任务,而不是 AuthenticationResult 对象,因此方法 'CreateAuthorizationHeader' 和 属性 'AccessToken' 是(不是真的)"missing".
您的代码的固定版本为:
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;
或 或者,因此您的代码将真正 运行 异步 ,您可以将 '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;