Azure AD B2C в ядре Asp.net - PullRequest
       12

Azure AD B2C в ядре Asp.net

0 голосов
/ 04 февраля 2019

Я пытаюсь аутентифицировать свое веб-приложение ядра .net с помощью Azure AD B2C.

Контроллер

[Route("auth")]
    public class AuthController : Controller
    {
        [Route("signup")]
        public IActionResult SignUp()
        {
            return Challenge(new AuthenticationProperties { RedirectUri = "/" }, Policies.SignUp);
        }

        [Route("signin")]
        public IActionResult SignIn(string returnUrl)
        {
            var redirectUri = string.IsNullOrWhiteSpace(returnUrl) ? "/" : returnUrl;
            return Challenge(new AuthenticationProperties { RedirectUri = redirectUri }, Policies.SignIn);
        }

        [HttpPost]
        [Route("signout")]
        [ValidateAntiForgeryToken]
        public async Task SignOut()
        {
            if (User.Identity.IsAuthenticated)
            {
                await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
                var scheme = User.FindFirst("tfp").Value;
                await HttpContext.SignOutAsync(scheme);
            }
        }

        [Route("profile")]
        public IActionResult Profile(string returnUrl)
        {
            var redirectUri = string.IsNullOrWhiteSpace(returnUrl) ? "/" : returnUrl;
            return Challenge(new AuthenticationProperties { RedirectUri = redirectUri }, Policies.Profile);
        }

    }

Startup.cs

public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            var events = new OpenIdConnectEvents
            {
                OnRemoteFailure = context =>
                {
                    // You might want to log the error
                    context.Response.Redirect("/");
                    context.HandleResponse();
                    return Task.CompletedTask;
                }
            };
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = Policies.SignUpIn;
            })
            .AddOpenIdConnect(Policies.SignUp, options =>
            {
                options.Events = events;
                SetupOpenIdConnectOptions(options, Policies.SignUp);
            })
            .AddOpenIdConnect(Policies.SignIn, options => SetupOpenIdConnectOptions(options, Policies.SignIn))
            .AddOpenIdConnect(Policies.SignUpIn, options =>
            {
                options.Events = events;
                SetupOpenIdConnectOptions(options, Policies.SignUpIn);
            })
            .AddOpenIdConnect(Policies.Profile, options =>
            {
                options.Events = events;
                SetupOpenIdConnectOptions(options, Policies.Profile);
            })
            .AddCookie();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseAuthentication();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });


        }

        private void SetupOpenIdConnectOptions(OpenIdConnectOptions options, string policy)
        {
            options.MetadataAddress = $"https://KiessigB2C.b2clogin.com/kiessigb2c.onmicrosoft.com/v2.0/.well-known/openid-configuration?p={policy}";
            options.ClientId = "c834316f-33a4-4184-b1e2-34e6da3d426f";
            options.ResponseType = OpenIdConnectResponseType.IdToken;
            options.CallbackPath = $"/signin/{policy}";
            options.SignedOutCallbackPath = $"/signout/{policy}";
            options.SignedOutRedirectUri = "/";
            options.TokenValidationParameters.NameClaimType = "name";
        }

Когда я пытаюсьВойдите на страницу «MS». Я могу ввести имя пользователя и пароль.Но при перенаправлении возникает ошибка.

"Произошло необработанное исключение при обработке запроса.

Исключение: сбой корреляции.

Неизвестное местоположение

Исключение: при обработке удаленного входа произошла ошибка.

Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync () "

Также, когда я" зарегистрируюсь ", он вернется в мое веб-приложение, ноне логин.Что я делаю не так?Спасибо за вашу помощь.

Стефан

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...