我正在尝试在C#,Visual Studio 17中对Azure功能进行身份验证。此行显示错误:
var credentials = new UserPasswordCredential(UserName, Password);
如果我没有包含NuGet包,它会给出错误:"类型或命名空间名称" UserpasswordCredential"找不到(你错过了使用指令或汇编引用吗?)"。
我已经包含了Microsoft.IdentityModel.Clients.ActiveDirectory包(v.3.19.2 - 最新稳定版)。但由于某种原因,这个位丢失了(我也尝试过旧版本)。微软自己说它应该是软件包https://docs.microsoft.com/en-us/dotnet/api/microsoft.identitymodel.clients.activedirectory.userpasswordcredential?view=azure-dotnet的一部分。但事实并非如此。
有人知道如何解决这个问题吗?
以下完整代码:
/// <summary>
/// Generates a new Azure Active Directory access token
/// </summary>
/// <param name = "url" > A URL for the end-point for which the access token is requested</param>
/// <returns>The access token</returns>
public static string GenerateActiveDirectoryAccessToken(string url)
{
var authority = AuthorityUrl;
var authContext = new AuthenticationContext(authority);
var credentials = new UserPasswordCredential(UserName, Password);
var authResult = authContext.AcquireTokenAsync(url, ClientId, credentials);
return authResult.Result.AccessToken;
}
答案 0 :(得分:3)
您是否正在使用.NET Core? .NET Core不支持UserPasswordCredential。仅供参考:https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/issues/482
我也遇到了这个问题。建议不要对用户名和密码进行硬编码,并且可以使用应用程序权限而不是委派权限。但有时某些API需要委派权限。因此,我想实现一种无用户交互方法来调用Graph API。看起来像是一个僵局。