如何使用Azure AD保护简单的HTML文件?

时间:2017-09-22 19:48:30

标签: azure azure-active-directory

我有一个旧的静态网站,它只是简单的HTML和用于UI效果的简单JavaScript。本网站没有服务器端代码,api,配置文件或任何内容 - 只是原始HTML文件,CSS,图片等。

该网站将托管在Azure中。它将位于本地IIS服务器上。如果我将网站拉入Visual Studio,则“配置Azure AD身份验证”向导会显示:

  

在此项目中找到了不兼容的身份验证配置   ()。

如何使用Azure AD保护简单的HTML文件?

2 个答案:

答案 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文件的身份验证。