我有一个旧的静态网站,它只是简单的HTML和用于UI效果的简单JavaScript。本网站没有服务器端代码,api,配置文件或任何内容 - 只是原始HTML文件,CSS,图片等。
该网站将不托管在Azure中。它将位于本地IIS服务器上。如果我将网站拉入Visual Studio,则“配置Azure AD身份验证”向导会显示:
在此项目中找到了不兼容的身份验证配置 ()。
如何使用Azure AD保护简单的HTML文件?
答案 0 :(得分:1)
Visual Studio“配置Azure AD身份验证”向导适用于ASP.Net Web应用程序和Web API。
在您的情况下,您正在构建的内容被视为“单页应用程序”或 SPA 。即使您可能有多个页面,此术语也仅适用于没有后端代码的客户端Web应用程序。
为此,您应该遵循Azure AD Javascript Single Page Application示例。
它的要点是你应该我们ADAL.js ,就像这个样本app.js中所示的那样:
// Configure ADAL
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: '[Enter your tenant here, e.g. contoso.onmicrosoft.com]',
clientId: '[Enter your client_id here, e.g. g075edef-0efa-453b-997b-de1337c29185]',
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage', // enable this for IE, as sessionStorage does not work for localhost.
};
var authContext = new AuthenticationContext(config);
// Check For & Handle Redirect From AAD After Login
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
$errorMessage.html(authContext.getLoginError());
if (isCallback && !authContext.getLoginError()) {
window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
}
// Check Login Status, Update UI
var user = authContext.getCachedUser();
if (user) {
//Do UI for authenticated user
} else {
//Show UI for unauthenticated user
}
// Register NavBar Click Handlers
$signOutButton.click(function () {
authContext.logOut();
});
$signInButton.click(function () {
authContext.login();
});
注意:还有Angular SPA sample。
答案 1 :(得分:0)
Saca发布的解决方案向我指出了正确的方向,但是将JS添加到每个页面对我来说都不是一个有效的解决方案。有成千上万的HTML文件,很多没有常见的JS文件我可以将ADAL代码添加到其中。我必须找到一种方法在所有这些页面上插入JS。
我的第一个解决方案是创建一个正常的.NET MVC应用程序,并配置了正确的auth。然后我只是通过iFrame加载这些遗留内容。这有效,但对用户有限制。
正如费雪在另一条评论中提到的,下一个解决方案涉及废弃iFrame,但通过控制器路由所有静态文件请求。使用此作为参考,以了解:https://weblogs.asp.net/jongalloway/asp-net-mvc-routing-intercepting-file-requests-like-index-html-and-what-it-teaches-about-how-routing-works
以上解决方案有效。然而,最终这个应用程序最终成为一个Azure应用程序服务,我只是在应用程序服务级别启用了纯html文件的身份验证。