.Net Core WebApi + Angular 项目中的安全 SPA
Secure SPA in .Net Core WebApi + Angular project
我正在构建基于 .Net Core 3.1 + Angular 模板的应用程序。
该应用程序正在使用 Azure AD 对用户进行身份验证。
后端配置如下:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureActiveDirectory", options));
前端使用@azure/msal-angular 将用户在第一个未验证的调用重定向到Api。
这很好用。
现在我想保护更多的应用程序。我希望在用户未通过身份验证时下载 angular 文件或任何静态文件 NOT。
我如何做到这一点?如果用户未通过身份验证,如何保护根文件夹上的应用程序并将用户重定向到 Azure AD 登录页面?
根据这个 post:
您可以在使用 spa 之前尝试这样做:
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync("oidc");
}
else
{
await next();
}
});
不确定这是否对您有帮助,但我很想知道这是否符合您的要求。
我找到了实现这一目标的方法。 (alphaz18 你的答案正确但不完整)
首先,由于后端要重定向到 Azure AD 登录,我们可以从 SPA 中完全删除 @azure/msal-angular 模块。
现在我们需要配置后端来与此建立连接
services.AddAzureAD(options => Configuration.Bind("AzureActiveDirectory", options));
在 UseSpa 之前,我们需要启动身份验证(由 alphaz18 发现)
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync(AzureADDefaults.AuthenticationScheme);
}
else
{
await next();
}
});
因为我仍然希望 API 可以通过不记名身份验证访问,所以我发现 this answer 可以正确地混合使用。
在 Azure AD 端,我们不再需要注册 2 个应用程序,只需一个就足够了。
我正在构建基于 .Net Core 3.1 + Angular 模板的应用程序。 该应用程序正在使用 Azure AD 对用户进行身份验证。
后端配置如下:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureActiveDirectory", options));
前端使用@azure/msal-angular 将用户在第一个未验证的调用重定向到Api。 这很好用。
现在我想保护更多的应用程序。我希望在用户未通过身份验证时下载 angular 文件或任何静态文件 NOT。
我如何做到这一点?如果用户未通过身份验证,如何保护根文件夹上的应用程序并将用户重定向到 Azure AD 登录页面?
根据这个 post:
您可以在使用 spa 之前尝试这样做:
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync("oidc");
}
else
{
await next();
}
});
不确定这是否对您有帮助,但我很想知道这是否符合您的要求。
我找到了实现这一目标的方法。 (alphaz18 你的答案正确但不完整)
首先,由于后端要重定向到 Azure AD 登录,我们可以从 SPA 中完全删除 @azure/msal-angular 模块。
现在我们需要配置后端来与此建立连接
services.AddAzureAD(options => Configuration.Bind("AzureActiveDirectory", options));
在 UseSpa 之前,我们需要启动身份验证(由 alphaz18 发现)
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync(AzureADDefaults.AuthenticationScheme);
}
else
{
await next();
}
});
因为我仍然希望 API 可以通过不记名身份验证访问,所以我发现 this answer 可以正确地混合使用。
在 Azure AD 端,我们不再需要注册 2 个应用程序,只需一个就足够了。