在请求中传递访问令牌时获取未授权消息

时间:2018-09-24 15:22:39

标签: c# azure-active-directory access-token

我创建了一个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

1 个答案:

答案 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用户回答一些查询。