我最近一直在研究ACS,AAL,WAAD,我想避免将用户重定向到他们IDP的登录页面。我希望将我的用户保留在我的网站中,并通过下拉列表向他们显示他们希望进行身份验证的人以及请求用户名和密码的区域,然后通过代码获取令牌。这可能吗?
我一直在审查一些示例应用程序并生成一个快速模型,但似乎无法使事情正常工作,例如。
_authContext = new AuthenticationContext("https://littledeadbunny.accesscontrol.windows.net");
string enteredEmailDomain = UserNameTextbox.Text.Substring(UserNameTextbox.Text.IndexOf('@') + 1);
IList<IdentityProviderDescriptor> idpdList = _authContext.GetProviders("http://littledeadbunny.com/NonInteractive");
foreach (IdentityProviderDescriptor idpd in idpdList)
{
if (String.Compare(ServiceRealmDropDownList.SelectedValue, idpd.Name, StringComparison.OrdinalIgnoreCase) == 0)
{
Credential credential;
credential = new UsernamePasswordCredential(enteredEmailDomain, UserNameTextbox.Text, PasswordTextbox.Text);
_assertionCredential = _authContext.AcquireToken("http://littledeadbunny.com/NonInteractive", idpd, credential);
return;
}
}
使用上面的代码,当我尝试使用Windows Azure Active Directory用户(管理员)时,我收到错误“根级别的数据无效。第1行,位置1”。我试图获得的地方。
当我使用Google时,收到错误“0x8010000C:没有身份提供商与所请求的协议匹配”。
如果有工作样品?如果我做了一些明显错误的事情,我会很感激修正。
答案 0 :(得分:1)
被动身份提供商不支持此功能。像Google,Facebook等的IdP不希望其他人为他们收集凭据,因为这会导致安全问题和可能的网络钓鱼攻击。他们也不支持它,因为他们需要能够显示权限对话框(该屏幕询问用户是否要向您发布数据),如果没有浏览器重定向到他们,他们就无法做到这一点。此外,谷歌特别支持双因素身份验证,你无法复制,并且通常收集凭据会打开围绕其他UI问题的整套蠕虫,例如错误或忘记密码。
这通常也是糟糕的用户体验,因为您的用户很可能已经登录Google并在那里拥有Cookie。如果是这样,如果他们已经同意您的应用,他们就会被默默地重定向回给您。在您的方案中,即使用户已经登录,他们仍然必须提供用户名/密码。
执行这些登录的正确方法是在应用程序中呈现一个浏览器控件,允许用户登录他们的IdP,这是AAL帮助的。
答案 1 :(得分:0)
我遇到了同样的错误,执行powerscript解决了这个错误
PS C:\ windows \ system32&gt; $ replyUrl = New-MsolServicePrincipalAddresses - 地址https://mydomain.accesscontrol.windows.net/
PS C:\ windows \ system32&gt; New-MsolServicePrincipal -ServicePrincipalNames @(“https://mydomain.accesscontrol.windows.net/”) - 显示名称 “MyDomain命名空间” - 地址$ replyUrl
但是我仍然遇到了403权限错误
如果你有任何进展,我想知道如何:)