我提到this question和this MSDN post,但无法解决问题。
下面的代码演示了如何使用Web浏览器执行WAAD身份验证:
AuthenticationContext auth = new AuthenticationContext("https://login.windows.net/" + myDomain);
AuthenticationResult result = auth.AcquireToken(resource, clientID, resourceAppIDURI);
这将打开一个浏览器,并要求用户输入工作正常的详细信息。
但是,我有一个GUI客户端,它可以自己使用用户名/密码/域。因此,目的是从GUI客户端收集详细信息,并直接提供给WAAD服务器并让用户进行身份验证。
怎么做?
只是看一下AcquireToken()
的重载,我确实得到了一些线索(这也可能是错误的):
AuthenticationResult AcquireToken (string resource, Credential credential);
和
AuthenticationResult AcquireToken (string authorizationCode, string redirectUri, ClientCredential credential);
但我不明白,如何创建class ClientCredential
(Credential
的子类)。需要注意的是,此类属于namespace Microsoft.WindowsAzure.ActiveDirectory.Authentication
以下是它的构造函数:
ClientCredential(string clientId, SecureString secureClientSecret);
ClientCredential(string clientId, string clientSecret);
在线搜索,我得不到多少答案,我确实得到this link。但SecureString
的部分再次对我来说是一个谜。如何使用SecureString
来传达用户名/密码/域名?
答案 0 :(得分:4)
旧版AAL支持此功能。然而,它在大约2-3个月前被移除(以及显示它的样本)。现在,用户身份验证只能通过浏览器身份验证窗口来实现。
我不是百分百肯定,但我认为的动机是为最终用户创建标准/一致的登录体验。如果您使用的是Windows 8应用程序,则WebAuthenticationBroker会处理此问题,用户将识别所有Windows 8应用程序。如果您是一个Web应用程序,则会显示AzureAD登录页面并且可以识别。
答案 1 :(得分:2)
您找到的ClientCredential
AcquireToken
超载是您使用客户端ID和密钥进行身份验证(以便客户不必共享其用户名和密码)。
创建一个" Web应用程序"在WAAD中,应用程序将被赋予客户端ID guid。这是ClientCredential()
构造函数中的第一个参数。
要获取第二个参数,请在WAAD Web应用程序中添加一个键。
您可能希望更新到最新版本的AAL,现在称为ADAL。 NuGet link
答案 2 :(得分:2)