Microsoft graph api 如何使用SecretentialClientApplication执行对Graph(Group.ReadWrite.All)的AppOnly请求

Microsoft graph api 如何使用SecretentialClientApplication执行对Graph(Group.ReadWrite.All)的AppOnly请求,microsoft-graph-api,msal,Microsoft Graph Api,Msal,我一直在使用MSALMicrosoft.Identity.Client.SecretentialClientApplication来执行仅应用程序的Microsoft图形组操作 var RedirectUri=“urn:ietf:wg:oauth:2.0:oob”; var clientApplication=new-secretentialclientapplication(ClientId,RedirectUri,new-ClientCredential(ClientSecret),null

我一直在使用MSAL
Microsoft.Identity.Client.SecretentialClientApplication
来执行仅应用程序的Microsoft图形组操作

var RedirectUri=“urn:ietf:wg:oauth:2.0:oob”;
var clientApplication=new-secretentialclientapplication(ClientId,RedirectUri,new-ClientCredential(ClientSecret),null);
我被困在下一步:

authenticationResult=clientApplication.AcquireTokenSilentAsync(新字符串[]{“Group.ReadWrite.All”});
我获取错误
无法\u以静默方式获取\u令牌\u

authenticationResult=clientApplication.AcquireTokenForClient(新字符串[]{“Group.ReadWrite.All”},string.Empty).GetAwaiter().GetResult();
我得到错误
无效的\u范围

我不知道该往哪个方向走

注:

  • 使用
    PublicClientApplication
    同样的代码也可以正常工作
  • 应用程序同时具有AppOnly
    Group.ReadWrite.All
    和Delegate
    Group.ReadWrite.All
    权限
  • 使用
    PublicClienApplication
    会出现一个不需要的UI对话框
var clientApplication=newpublicclientapplication(ClientId);
authenticationResult=clientApplication.AcquireTokenAsync(作用域).GetAwaiter().GetResult();

请尝试同意您创建的自信客户。 您可以通过使用设置修改以下URL来完成此操作:

https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&resource=<ResourceURI>&prompt=admin_consent
https://login.microsoftonline.com//oauth2/authorize?client_id=&response_type=code&redirect_uri=&resource=&prompt=admin_consent
确保您输入该URL的信息是机密客户端


我希望这有帮助

为了澄清,您是否试图在没有同意屏幕的情况下使用“group.readwrite.all”范围获取访问令牌?(不需要的ui对话框)?我想通过一个只有clientid/clientsecret的无人参与脚本获取访问令牌。通过PublicClientApplication的“不需要的ui对话框”会停止该流程。您是否首先同意尝试使用的应用程序?无论您创建什么类型的应用程序,您都需要在第一次使用该应用程序时获得用户同意,以便记录同意。之后,您应该能够在没有用户在场的情况下进行后续呼叫。如果您需要更多说明,请告诉我,我将为您写一个“答案”。我再次尝试了以下步骤:注册新应用程序、创建客户端密码、创建基于移动的重定向URL。添加仅应用程序组。ReadWrite.All更改机密ClientApplication以使用新的clientid/secret-表示获取令牌失败。使用新的clientid调用PublicClientApplication-UI请求与管理员用户进行身份验证,请求授予权限(包括Group.ReadWrite.All)-返回正确的令牌,并可将其用于图形。再次使用SecretentialClientApplication打电话,它显示再次无声地获取令牌失败。嗨,对不起,我已经离开5天了,再次尝试解决这个问题。我不认为有办法在PublicClientApplication或SecretentialClientApplication库中添加prompt=admin_同意,对吗?我看到一些ADAL的例子试图做到这一点,但我认为MSAL将能够做到一切。是否有一个SecretentialClientApplication示例演示了如何进行基本操作?我认为您可能是对的,因为ADAL不具体支持“管理员同意”:。无论哪种方式,您都不需要ADAL为您生成URL。您可以使用上面提供的模板自己生成URL。请注意,ADAL在身份验证步骤中没有做任何神奇的事情,它只是对各种OAuth端点的https调用,如前所述。我在使用ADAL调用url方面取得了一些进展,并获得了管理员的同意。我还得到了授权令牌。然后我切换到我的MSAL机密客户端应用程序,使用相同的ClientID/ClientSecret,我仍然无法以静默方式获取令牌。我想我只是混淆了一些关于如何设置机密客户端应用程序的基本知识。您是如何创建应用程序的?据我所知,MSAL应仅适用于V2应用程序,而ADAL仅适用于V1应用程序或类似的应用程序。您是否可能将错误的客户端库用于错误的应用程序类型?看起来V2应用程序的管理员同意方法有所不同。请参阅:。不是prompt=admin\u approve,而是另一个端点:。该页面详细介绍了流程。