我们的想法是让它像Azure Powershell一样工作,即弹出标准的Active Directory身份验证对话框,输入我的凭据,AzureAD执行其操作,然后控制台应用程序可以访问某个Web服务。
这可能吗? 它不应该那么难,但我找不到任何例子。
查看WPF示例,我看到它在app.config中设置了一个客户端ID。这真的有必要吗?我的意思是,单页的js应用程序也没有在AD上注册,是吗?
答案 0 :(得分:1)
事实上,任何客户端应用程序都应该在AAD中注册。
控制台应用也必须在Azure AD中注册,因此您将拥有客户端ID和客户端重定向网址,但没有客户端密钥。然后以下代码应该起作用:
void Main()
{
var clientId = "client-GUID";
var clientUrl = new Uri("redirect-url"); //can be anything starting with localhost
var tenant = "name of your AAD tenant";
string authority = "https://login.windows.net/" + tenant;
string resource = "https://outlook.office365.com"; ///put id or url of resource you're accessing
AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
Console.WriteLine("Trying to acquire token");
var pp = new PlatformParameters(PromptBehavior.Auto); //this brings web prompt
var token = authenticationContext.AcquireTokenAsync(resource, clientId, clientUrl, pp, UserIdentifier.AnyUser).Result;
Console.WriteLine("Got the token: {0}", token.AccessToken);
}