2016-12-14 39 views
0

我一直在玩MSAL Microsoft.Identity.Client.ConfidentialClientApplication来执行应用程序唯一的Microsoft Graph - Groups操作。如何使用ConfidentialClientApplication执行仅适用于Graph(Group.ReadWrite.All)的请求

var RedirectUri = "urn:ietf:wg:oauth:2.0:oob"; var clientApplication = new ConfidentialClientApplication(ClientId, RedirectUri, new ClientCredential(ClientSecret), null);

我被困在接下来的步骤:

authenticationResult = clientApplication.AcquireTokenSilentAsync(new string[]{"Group.ReadWrite.All"}).GetAwaiter().GetResult();

我得到错误failed_to_acquire_token_silently

authenticationResult = clientApplication.AcquireTokenForClient(new string[]{"Group.ReadWrite.All"}, string.Empty).GetAwaiter().GetResult();

我得到错误invalid_scope

不知道我应该继续哪个方向。

(注 - 与PublicClientApplication相同的代码工作正常 - 应用既有AppOnly Group.ReadWrite.All和代表Group.ReadWrite.All权限 - 与PublicClienApplication有不必要的UI对话框...)

var clientApplication = new PublicClientApplication(ClientId); authenticationResult = clientApplication.AcquireTokenAsync(Scopes).GetAwaiter().GetResult();

+0

为了澄清,您是否试图在没有同意屏幕的情况下使用“group.readwrite.all”范围获取访问令牌? ('不需要的ui对话框')? –

+0

我想通过只有clientid/clientsecret的无人参与脚本获取访问令牌。 通过PublicClientApplication的'unwanted ui dialog'会停止该流程。 –

+0

你是否首先同意你正在尝试使用的应用程序?无论您创建什么类型的应用程序,您都需要获得用户第一次同意该应用程序,以便记录同意。之后,您应该能够在用户不在场的情况下进行后续呼叫。如果您在这里需要更多说明,请告诉我,我会为您写一个“答案”。 –

回答

0

请尝试同意您创建的自信客户端。 你可以通过设置修改以下网址执行此操作:

https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&resource=<ResourceURI>&prompt=admin_consent 

确保你把那个URL的信息是保密的客户端。

我希望这有助于!

+0

嗨,对不起,我已经走了5天,第二次刺伤了这个问题。我不认为有一种方法可以添加提示= admin_consent与PublicClientApplication或ConfidentialClientApplication库是正确的吗?我看到几个ADAL的例子试图做到这一点 - 但我认为MSAL将能够做到一切。 是否有一个ConfidentialClientApplication示例显示如何执行基本操作? –

+0

我想你可能是对的,因为ADAL不具体支持“admin_consent”:[看这里](https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.clients.activedirectory.promptbehavior。 ASPX)。无论哪种方式,您都不需要ADAL来为您生成URL。您可以使用上面提供的模板自行生成URL。请注意,ADAL在身份验证步骤中并没有做任何奇妙的事情,它只是对各种OAuth端点的https调用,如[此处]所述(https://docs.microsoft.com/zh-cn/azure/active-directory/active -directory-protocols-oauth-code) –

+0

我使用ADAL调用url并通过admin_consent取得了一些进展。我也有认证令牌。 然后,我切换到我的MSAL ConfidentialClientApplication并使用相同的ClientID/ClientSecret,我仍然失败to_acquire_token_silently。 我怀疑我只是混淆了关于如何设置ConfidentialClientApplication的基本知识。 –

相关问题