我正在开发一个针对Microsoft Azure Active Directory对用户进行身份验证的Ionic 2应用程序。无法确定如何使用ADAL实现以下流程:
用户输入“用户名”和“密码” ==> 点击登录按钮 ==> 应用制作Azure AD调用通过传递用户输入的“用户名”和“密码” ==> Azure AD对用户进行身份验证并返回结果。
遵循Azure AD文档,我能够成功实现“ server-flow ”,在进行Azure AD调用时,它为我的应用打开了一个新的Microsoft Azure-AD登录页面输入“用户名”和“密码”。验证成功后,用户将重新登录我的应用程序主页。这很好用,但从UX的角度来看,这种体验并不是很好。
以下是我的方式:
myAzure = new WindowsAzure.MobileServiceClient(MY_AZURE_APP_SERVICE_URL);
myAzure .login('aad').then(
(result) => {
//Successful Login
},
(err) {
console.log("In client.login callback failed");
});
});
然后,我按照Azure AD文档实现了“ client-flow ”。我有一个问题:
1. 当我进行“authContext.acquireTokenSilentAsync()”调用或“authContext.acquireTokenAsync()”调用时,如何将“用户名”和“密码”传递给Azure AD
在ADAL库中执行这些方法后,似乎
如果上述两种方式都不是实现我的身份验证流程的正确方法,那么有人可以通过提供一些关于如何实现此功能的指针,链接或示例链接来帮助我吗?
我的应用用户将会加入我们的企业Azure-AD。我为我的应用程序创建了一个单独的Azure-AD租户(还创建了所需的设置,以便它与我的Azure应用服务等捆绑在一起),并且我会在需要时将用户添加到此租户。
谢谢。
答案 0 :(得分:0)
根据我的理解,客户端管理的身份验证流程可让您为用户提供单点登录体验,或从身份提供商处检索其他用户数据。
这意味着如果您在移动身份验证之前未对身份数据提供程序进行身份验证,则仍需要提示用户输入其用户名和密码。
“authContext.acquireTokenSilentAsync()”只能接受用户名而不能接受密码。那么,可以安全地假设这个方法不应该用于登录目的吗?
此方法旨在通过从缓存中获取令牌或使用刷新令牌续订令牌来静默获取令牌。它不是为此目的而设计的。
“authContext.acquireTokenAsync()”可以接受用户名,但另外还有一个名为“extraQueryParameters”的参数。我应该使用此参数传入密码吗?但是,这应该在屏幕上为用户打开登录页面。它确实在我的设备上打开了一个新的登录页面。所以不确定如何开发我的功能。
没有。您无法使用此功能传递密码。它会提示用户默认输入用户名和密码。但是,如果您已登录Azure AD,则可以通过指定下面的PromptBehavior.Never
来获取访问令牌而无需提示:
var resoult = authContext.AcquireTokenAsync(resource, clientId,new Uri("http://localhost"),new PlatformParameters( PromptBehavior.Never)).Result;
Console.WriteLine(resoult.AccessToken);