Я пытаюсь аутентифицировать свое веб-приложение ядра .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 () "
Также, когда я" зарегистрируюсь ", он вернется в мое веб-приложение, ноне логин.Что я делаю не так?Спасибо за вашу помощь.
Стефан