azure 无法使用c# .net 6为One-Drive生成令牌

jyztefdp  于 2022-11-30  发布在  C#
关注(0)|答案(1)|浏览(187)

我面临的问题,而试图为一个驱动器访问生成令牌。因为我有要求,用户可以从那里获得所有的文件一个驱动器使用我的应用程序。
我尝试了以下代码,但遇到错误。
{"错误":"授权无效","错误描述":" AADSTS65001:用户或管理员未同意使用ID为的应用程序。请为此用户和资源发送交互式授权请求。\r\n跟踪ID:相关识别码:时间戳记:2022年11月24日15:56:04Z ","错误代码":[65001],"时间戳":" 2022年11月24日15:56:04Z ","跟踪标识":" 33a0dd6a-6984 - 4c0a-8f74 - 6fbcd9c54301 ","相关标识":" 265ca054-ab98 - 450c-8281 - 851ef6b0fdc3 ","子错误":"需要同意"}
Find my code that I am trying. public async Task GetTokenAsync(string tenant, string clientId, string clientSecret, string username, string password) { HttpResponseMessage resp; string token; using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add( new ("application/x-www-form- urlencoded")); var req = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/{tenant}/oauth2/token/"); req.Content = new FormUrlEncodedContent(new Dictionary<string, string> { {"grant_type", "password"}, {"client_id", clientId}, {"client_secret", clientSecret}, {"resource", "https://graph.microsoft.com/"}, {"username", username}, {"password", password}

});

            resp = await httpClient.SendAsync(req);
            string content = await resp.Content.ReadAsStringAsync();
            var jsonObj = System.Text.Json.JsonSerializer.Deserialize<dynamic>(content);
            token = jsonObj["access_token"];
        }
        return token;
    }

没有

falq053o

falq053o1#

我尝试在我的环境中重现相同的错误,但得到了如下相同的错误:

如果您没有同意管理员同意您授予的API权限,通常会发生此错误,如下所示:

为了解决该错误,我创建了Azure AD应用程序并授予管理员对API权限的同意

为了生成访问令牌,我使用了以下参数:

GET https://login.microsoftonline.com/TenantId/oauth2/token

grant_type:password
client_id:53f9d6e0-f9e8-4620-9e45-XXXXX
client_secret:Msd8Q~q~-2gb4sooQVGDIQQAI92gXXXXX
resource:https://graph.microsoft.com/
username:username
password:Password

我能够成功生成访问令牌,如下所示:

如果问题仍然存在,请尝试更新Azure企业应用程序中的以下设置,如下所示:

  • 转到Azure Active Directory -〉企业应用程序-〉用户设置-〉同意和权限 *

x1c4d 1x指令集

否则,您可以使用下面的“端点”、“以管理员身份登录”和“接受”授予管理员同意:

https://login.microsoftonline.com/TenantId/adminconsent?client_id=ClientID

相关问题