Azure active directory MS Graph api用户身份验证失败

Azure active directory MS Graph api用户身份验证失败,azure-active-directory,microsoft-graph-api,Azure Active Directory,Microsoft Graph Api,我从MS Graph API开始。我需要一个登录的例子与最少的用户干预;如果可能的话,最多只运行一次应用程序,并且第一次运行应用程序。样例GraphTutorial应用程序()似乎每次运行时都需要用户干预,并且需要手动输入代码 谢谢 如果要在不登录的情况下调用graph api,可以使用客户端凭据流。微软也提供了这项服务。我还测试并选择了一些关键代码,如下所示: using Microsoft.AspNetCore.Mvc; using System; using System.Threadin

我从MS Graph API开始。我需要一个登录的例子与最少的用户干预;如果可能的话,最多只运行一次应用程序,并且第一次运行应用程序。样例GraphTutorial应用程序()似乎每次运行时都需要用户干预,并且需要手动输入代码

谢谢


如果要在不登录的情况下调用graph api,可以使用客户端凭据流。微软也提供了这项服务。我还测试并选择了一些关键代码,如下所示:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace WebApplication4clientflow.Controllers
{
    public class HelloController : Controller
    {
        public async Task<string> Index()
        {
            IConfidentialClientApplication app;
            app = ConfidentialClientApplicationBuilder.Create("azure_ad_app_clientid")
                    .WithClientSecret("client_secret_of_your_app")
                    .WithAuthority(new Uri("https://login.microsoftonline.com/tenant_name.onmicrosoft.com"))
                    .Build();

            AuthenticationResult result = null;
            string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
            result = await app.AcquireTokenForClient(scopes)
                    .ExecuteAsync();
            return result.AccessToken;
        }
    }
}
使用Microsoft.AspNetCore.Mvc;
使用制度;
使用System.Threading.Tasks;
使用Microsoft.Identity.Client;
命名空间WebApplication4clientflow.Controllers
{
公共类HelloController:控制器
{
公共异步任务索引()
{
IConfidentialClient应用程序;
app=secretentialClientApplicationBuilder.Create(“azure\u ad\u app\u clientid”)
.WithClientSecret(“你的应用程序的客户端密码”)
.WithAuthority(新Uri(“https://login.microsoftonline.com/tenant_name.onmicrosoft.com"))
.Build();
AuthenticationResult=null;
字符串[]范围=新字符串[]{”https://graph.microsoft.com/.default" };
结果=等待app.AcquireTokenForClient(作用域)
.ExecuteAsync();
返回result.AccessToken;
}
}
}
通过上面的代码,我们可以生成访问令牌来调用图api,但请注意,它不适用于那些没有访问令牌的api,如下所示:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace WebApplication4clientflow.Controllers
{
    public class HelloController : Controller
    {
        public async Task<string> Index()
        {
            IConfidentialClientApplication app;
            app = ConfidentialClientApplicationBuilder.Create("azure_ad_app_clientid")
                    .WithClientSecret("client_secret_of_your_app")
                    .WithAuthority(new Uri("https://login.microsoftonline.com/tenant_name.onmicrosoft.com"))
                    .Build();

            AuthenticationResult result = null;
            string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
            result = await app.AcquireTokenForClient(scopes)
                    .ExecuteAsync();
            return result.AccessToken;
        }
    }
}


如果您遇到进一步的问题,请随时通知我。

调用microsoft graph api需要请求头中的承载访问令牌,此令牌可以由服务器流生成。正如您所说的,您希望实现一个可以避免用户干预的功能,我认为您可以使用客户端凭据流来生成令牌,但是这个令牌不能用于那些需要委派api权限的api。你能告诉我们你想调用哪种api吗?我认为使用它是有意义的。每次您想要调用该图形api时,您都可以使用该流生成一个访问令牌,您不需要执行任何其他操作,例如输入帐户和密码,您可以使用该令牌来调用api。这是上面的答案。先生,有什么进展吗?如果你觉得我的帖子对你有帮助,请你接受它作为答案,提前看谢谢。这是我的荣幸:D