我创建了一个Windows应用程序,该应用程序正在调用Azure中托管的某些应用程序。应用服务正在使用AAD进行身份验证。 以下是我用于MS登录和存储令牌的方法。
authContext = new AuthenticationContext(authority, new FileCache());
authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Always)).ContinueWith(t =>
{
result = t.Result;
})
.Wait();
通过使用上述方法,我能够成功使用MS凭据登录并从结果获取访问令牌。
现在,我在标头请求中传递此令牌,以从启用了SSO的应用中获取一些数据,例如:-
using (var client = new HttpClient())
{
var uri = "http://appservice.azurewebsites.net/api/values/5";
_auth.GetToken().ContinueWith(t => { token = t.Result; }).Wait();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var TaskAPI = client.GetAsync(uri).ContinueWith(task =>
{
if (task.Status == TaskStatus.RanToCompletion)
{
var response = task.Result;
if (response.IsSuccessStatusCode)
{
flag = 1;
var data = response.Content.ReadAsStringAsync().Result;
}
}
});
TaskAPI .Wait();
}
获取令牌功能正在静默获取令牌
下面是GetToken(),用于获取调用API的令牌
authContext.AcquireTokenSilentAsync(todoListResourceId, clientId)
.ContinueWith(i =>
{
result = i.Result;
}).Wait();
return result.AccessToken;
当我通过传递检索到的令牌来调用此URI时,会收到Un Authorized(401)的响应。
我该如何检查令牌是否正确,我是否缺少某些东西或是否有其他方法可以做到这一点?
谢谢
Subham,Nathcorp
答案 0 :(得分:0)
如果您正在通过AAD运行带有AUTH的VS的官方API演示,请确保“ todoListResourceId”值与Web.config中的“ ida:Audience”值相同。
顺便说一句,我找到了解决Azure或O365问题的好渠道:https://support.microsoft.com/en-us/help/3174960/dev-chat-for-office365-azure 他们也会为普通的Azure用户回答一些查询。