Microsoft Graph-无法静默获取令牌

达罗加

我正在尝试从Web应用程序中的Microsoft图形获取数据。

当我调用时AcquireTokenSilentAsync(),出现错误“无法静默获取令牌。调用方法AcquireToken”。

因此,然后我尝试使用该AcquireTokenAsync()方法。这会获得一个令牌,但是,当我尝试访问该资源时,我得到403-禁止访问。

我已经在Fiddler中对其进行了测试,并且可以正常工作。

当我检查令牌AcquireTokenAsync()并将其与从提琴手获得的令牌进行比较时,它的长度约为1/3。我不知道这是否是一个问题,是否有解决方法?

有人知道这个问题的解决方案吗?

我的代码如下:

GetToken():

public async static Task<AuthenticationResult> GetTokenAsync(AuthenticationContext ctx, string resourceId)
{
    ClientCredential credential = new ClientCredential(OfficeSettings.ClientId, OfficeSettings.ClientSecret);
    var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
    UserIdentifier ident = new UserIdentifier(userObjectId, UserIdentifierType.UniqueId);

    var redirectUrl = new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path));

    try
    {
        var result = await ctx.AcquireTokenSilentAsync(resourceId, credential, ident);
        //var result = await ctx.AcquireTokenAsync(resourceId, credential);
        LastAuthority = ctx.Authority;
        return result;
    }
    catch (AdalException e)
    {
        ctx.TokenCache.Clear();
        return null;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

GetUserEmail()(正在访问资源):

private const string _allUsersUrl = "https://graph.microsoft.com/beta/users?$filter=displayName%20eq%20'{0}'";

public static async Task<List<string>> GetUserEmails(List<string> displayNames)
{
    var emails = new List<string>();
    using (var client = new HttpClient())
    {
        foreach (var name in displayNames)
        {
            var url = string.Format(_allUsersUrl, name.Replace(" ", "+")).Replace(" ", "%20");
            using (var req = new HttpRequestMessage(HttpMethod.Get, url))
            {
                var token = await GetToken();
                req.Headers.Add("Authorization", string.Format("Bearer {0}", token));
                req.Headers.TryAddWithoutValidation("Content-Type", "application/json");
                using (var response = await client.SendAsync(req))
                {
                    //TODO: Forbidden error message. However, token seems to be retrieved correctly
                    var content = await response.Content.ReadAsStringAsync();
                    foreach (var item in JObject.Parse(content)["value"])
                    {
                        emails.Add(item["userPrincipalName"].ToString());
                    }
                }
            }
        }
    }
    return emails;
}

编辑:

我还检查了缓存的内容,并将其与传递给它的参数进行了比较AcquireTokenSilentAsync(),所有内容似乎都匹配了。

达罗加

我发现的唯一解决方案是创建一个具有与另一个完全相同的权限的新Azure应用程序,并将我的应用程序指向新的客户端ID和客户端密钥。我不知道为什么这行得通,但它确实可以,现在我可以查询图表了。我希望这对以后的人有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法静默获取令牌-Microsoft Graph API获取用户的Outlook组

来自分类Dev

静默登录到Microsoft Graph?

来自分类Dev

如何从Microsoft Graph API获取访问令牌?

来自分类Dev

Microsoft Graph API - 无法刷新访问令牌

来自分类Dev

使用OAuthPrompt获取Microsoft Graph API的刷新令牌

来自分类Dev

如何使用 ajax 调用获取 Microsoft Graph API 访问令牌

来自分类Dev

访问令牌验证失败Microsoft Graph API

来自分类Dev

从Microsoft Graph获取所有用户

来自分类Dev

Microsoft Graph API获取渠道成员

来自分类Dev

如何使用Microsoft Graph API获取AppKey

来自分类Dev

如何使用Microsoft Graph获取关注的内容

来自分类Dev

获取扩展属性 Microsoft graph javascript api

来自分类Dev

从 Microsoft beta Graph API 获取任务列表

来自分类Dev

Microsoft Graph REST API无法写邮件

来自分类Dev

如何从Microsoft Search API获取“ @ microsoft.graph.downloadUrl”?

来自分类Dev

从 Microsoft Graph API 接收访问令牌但不接收刷新令牌

来自分类Dev

Microsoft Graph API-如何在没有授权码的情况下获取访问令牌?

来自分类Dev

使用Microsoft Identity获取Graph和Azure DevOps API的唯一令牌

来自分类Dev

我可以使用office.js中的bootstraptoken静默获取Graph的访问令牌吗?

来自分类Dev

使用访问令牌通过Microsoft Graph API与OneDrive进行交互

来自分类Dev

如何获得Microsoft Graph读取excel表的令牌?

来自分类Dev

如何验证使用Microsoft Graph API生成的oauth令牌

来自分类Dev

Microsoft Graph API-不接收刷新令牌

来自分类Dev

Microsoft Graph API:尝试获取Outlook邮箱的消息,但获取“ ResourceNotFound”

来自分类Dev

C#Microsoft Graph API获取特定的日历

来自分类Dev

Microsoft Graph:如何从电子邮件中获取别名?

来自分类Dev

从Microsoft Graph获取联系人的完整列表

来自分类Dev

创建组后,Microsoft Graph SDK获取网站URL

来自分类Dev

Microsoft Graph:如何通过 Web 应用从组织用户获取数据?

Related 相关文章

  1. 1

    无法静默获取令牌-Microsoft Graph API获取用户的Outlook组

  2. 2

    静默登录到Microsoft Graph?

  3. 3

    如何从Microsoft Graph API获取访问令牌?

  4. 4

    Microsoft Graph API - 无法刷新访问令牌

  5. 5

    使用OAuthPrompt获取Microsoft Graph API的刷新令牌

  6. 6

    如何使用 ajax 调用获取 Microsoft Graph API 访问令牌

  7. 7

    访问令牌验证失败Microsoft Graph API

  8. 8

    从Microsoft Graph获取所有用户

  9. 9

    Microsoft Graph API获取渠道成员

  10. 10

    如何使用Microsoft Graph API获取AppKey

  11. 11

    如何使用Microsoft Graph获取关注的内容

  12. 12

    获取扩展属性 Microsoft graph javascript api

  13. 13

    从 Microsoft beta Graph API 获取任务列表

  14. 14

    Microsoft Graph REST API无法写邮件

  15. 15

    如何从Microsoft Search API获取“ @ microsoft.graph.downloadUrl”?

  16. 16

    从 Microsoft Graph API 接收访问令牌但不接收刷新令牌

  17. 17

    Microsoft Graph API-如何在没有授权码的情况下获取访问令牌?

  18. 18

    使用Microsoft Identity获取Graph和Azure DevOps API的唯一令牌

  19. 19

    我可以使用office.js中的bootstraptoken静默获取Graph的访问令牌吗?

  20. 20

    使用访问令牌通过Microsoft Graph API与OneDrive进行交互

  21. 21

    如何获得Microsoft Graph读取excel表的令牌?

  22. 22

    如何验证使用Microsoft Graph API生成的oauth令牌

  23. 23

    Microsoft Graph API-不接收刷新令牌

  24. 24

    Microsoft Graph API:尝试获取Outlook邮箱的消息,但获取“ ResourceNotFound”

  25. 25

    C#Microsoft Graph API获取特定的日历

  26. 26

    Microsoft Graph:如何从电子邮件中获取别名?

  27. 27

    从Microsoft Graph获取联系人的完整列表

  28. 28

    创建组后,Microsoft Graph SDK获取网站URL

  29. 29

    Microsoft Graph:如何通过 Web 应用从组织用户获取数据?

热门标签

归档