如何将具有AzureAD身份验证的Asp.Net-Core 2.2 Razor Pages应用程序部署到Azure

时间:2019-07-05 09:11:38

标签: c# azure razor-pages asp.net-core-2.2

我正在使用ASP.NET Core 2.2和Razor Pages创建一个新的WebApp,我想使用AzureAD对用户进行身份验证。这可以在本地使用localhost正常工作,并且我可以顺利登录和注销。但是,当我将其发布到Azure时,我无法登录。在Microsoft登录页面后,我重定向到WebApp到页面“ /.auth/login/done”,该页面显示:“您已成功登录。网站”,我可以返回我的网站,但我尚未登录。

在Azure的应用程序注册中,我已经为本地主机和应用程序配置了重定向Urls。对于本地主机,它看起来像“ https://localhost:44321/.auth/login/aad/callback”,对于应用程序来说,它看起来像“ https://maywebapp.azurewebsites.net/.auth/login/aad/callback”。 我将应用程序配置为始终使用https来确保Url与Azure中配置的URL相同。

这是我的服务配置:

services.AddAuthentication(options =>
            {
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
                 .AddOpenIdConnect(options =>
                 {
                     options.Authority = Configuration["Microsoft:Authority"];
                     options.ClientId = Configuration["Microsoft:ClientId"];
                     options.CallbackPath = Configuration["Microsoft:CallbackPath"];
                     options.ResponseType = OpenIdConnectResponseType.IdToken;
                     options.SignedOutRedirectUri = Configuration["Microsoft:SignedOutRedirectUri"];
                     options.TokenValidationParameters.NameClaimType = "name";
                 })
                .AddCookie();

我希望与在本地运行可运行的应用程序时具有相同的行为。

1 个答案:

答案 0 :(得分:0)

要验证对此文件夹中页面的所有访问,可以向所有页面模型类添加Authorize属性,但我们可以做得更好。回到Startup类,我们可以添加一些Razor Pages约定以使我们的生活更轻松。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
            .AddRazorPagesOptions(options =>
            {
                options.Conventions.AuthorizeFolder("/Account");
            });
    ...
}

这是article关于使用asp.net剃须刀进行身份验证。