我正在尝试将Azure Active Directory登录添加到具有现有“遗留”安全性的.NET应用程序中(某些用户将使用AD,其他用户将使用现有安全性)。我正在调用Azure Active Directory登录过程,如下所示:
HttpContext.Current.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/myredirectpage.aspx" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
...在重定向页面上,我可以阅读这样的登录用户信息:
var x = HttpContext.Current.GetOwinContext();
这有效,但它要求用户同意应用程序的阅读其个人资料的请求。 (特别是它说“App X需要获得许可才能登录并阅读您的个人资料”,然后如果您点击“详细信息”,组织和应用程序发布者将显示相同)。
我的问题是,有没有办法避免这种同意步骤?我的域管理员可以以某种方式“预分配”我的应用程序到域用户的子集吗?在Azure中,我有“共同管理员”访问权限,但是当我点击“用户”标签时,它会显示“您无权管理此应用程序。”
答案 0 :(得分:1)
目录管理员可以通过特定的同意流预先批准应用程序,我们称之为“管理员同意” - 请查看https://azure.microsoft.com/en-us/documentation/samples/active-directory-dotnet-webapp-multitenant-openidconnect/中的注册控制器。请注意,应用程序本身必须将此作为同意路由提供,这不是管理员自己做的事情。另请注意,作为Azure订阅中的管理员并不一定意味着成为目录中的管理员 - 我建议在Azure AD管理UX中查找用户,并查看分配了哪些目录角色。 关于仅限于一部分用户的同意。管理员可以将应用程序设置为需要明确的用户分配 - 以便用户获取应用程序的令牌。如果应用程序发布应用程序角色,则管理员甚至可以直接将用户分配给角色,作为控制访问的方式。请参考https://azure.microsoft.com/en-us/documentation/samples/active-directory-dotnet-webapp-roleclaims/获取初级读本。
答案 1 :(得分:0)
回答我自己的问题 - 当全局Azure管理员创建应用程序而不是共同管理员时,情况有效。我没有必要运行管理员同意过程。它“只是工作”,我可以使用域帐户登录,无需同意提示。如果没有同意提示,我现在可以静默检查针对Azure Active Directory的用户标识和密码,并在失败时回退到旧版身份验证。结束使用本机应用程序并请求graph.windows.net资源。相关的ADAL.NET C#代码如下:
UserCredential uc = new UserCredential(username, password);
string authority = "https://login.windows.net/common";
AuthenticationResult r = ac.AcquireToken("https://graph.windows.net/", MY_CLIENT_ID, uc);
// Pull user's guid from r, look up info in DB, continue...
此方法允许我将Azure AD身份验证集成到我的应用程序中,而无需更改登录页面或要求用户多次输入密码。