AcquireToken(字符串资源,字符串clientId,UserCredential userCredential)不适用于Azure身份验证

时间:2019-05-20 16:27:07

标签: c# oauth-2.0 azure-active-directory adal azure-authentication

使用Microsoft.IdentityModel.Clients.ActiveDirectory(2.22.302111727)我正在尝试通过ADAL AcquireToken(resourceUri,新ClientCredential(clientId,clientSecret)获取访问令牌和刷新令牌,但我能够获得唯一的访问权限仅令牌,但当我将同一应用程序与AcquireToken(resourceUri,clientId,userCredential)一起使用,并将用户名和密码作为userCredentials传递时,我既可以访问又可以刷新令牌。

string resourceUri = "https://graph.microsoft.com";
string clientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";


 AuthenticationResult token = authContext.AcquireToken(resourceUri, new 
ClientCredential(clientId,clientSecret));

string resourceUri = "https://graph.microsoft.com";
string clientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";


AuthenticationResult token = authContext.AcquireToken(resourceUri, new 
ClientCredential(clientId,clientSecret));

我也尝试过使用AcquireToken(clientId,resourceUri,new Uri(redirectUri)),但是它给我错误“ AADSTS7000218:请求正文必须包含以下参数:'client_assertion'或'client_secret'”,并且我尝试了AcquireToken (resourceUri,clientId,新Uri(redirectUri),                     PromptBehavior.RefreshSession,新的UserIdentifier(“ xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx”,UserIdentifierType.UniqueId)),并且显示错误消息“ AADSTS650057:资源无效。客户端已请求访问未在请求的资源中列出的资源客户端应用程序注册中的权限。客户端应用程序ID:00000003-0000-0000-c000-000000000000(Microsoft Graph)。 请解释错误AADSTS650057中缺少的确切资源值。

1 个答案:

答案 0 :(得分:1)

您可能会遇到几个不同的错误。 OAuth2客户端凭据授予不会返回刷新令牌(enter link description here),因为您可以使用现有凭据获取新令牌。涉及用户凭据的请求的确会返回刷新令牌,因为您可能想续订访问令牌,而不必提示用户输入凭据。

AADSTS650057很可能是由于您的应用程序已在AAD中注册而没有调用MS Graph的许可所致。一个应用程序必须具有“应用程序权限”(使用客户端凭据时)或“委派权限”(使用用户凭据时)才能获得对此资源的令牌。