Меня просят аутентифицировать существующее веб-приложение MVC с помощью Azure AD B2 C. Поскольку я новичок в Azure, а сайт входа в систему Azure еще недоступен сторонним поставщиком, я пробую PO C на основе этого учебного проекта: https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi.
Что я сделал:
- Я загрузил образец проекта и протестировал его. Он работает, как ожидалось.
- Я скопировал Stratup.cs и Startup.Auth.cs из образца в свой проект, а все настройки - в web.config, почти без изменений. После этого при запуске моего проекта вызывается ConfigureAuth (), и можно открыть домашнюю страницу (авторизация не требуется).
Проблема: при попытке открыть страницу, требующую аутентификации, Azure страница входа в систему не запускается, и я получаю сообщение об ошибке 500 с URL-адресом, являющимся целевым URL. И я обнаружил, что OnRedirectToIdentityProvider не запускается.
Я подозревал, что проблема в моем web.config, поэтому я копирую его из своего проекта в образец и запускаю образец, он все еще работает. Таким образом, настройки web.config не должны быть проблемой.
Ниже приведены примеры кодов. Любая идея приветствуется.
public void ConfigureAuth(IAppBuilder app)
{
// Required for Azure webapps, as by default they force TLS 1.2 and this project attempts 1.0
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
// Generate the metadata address using the tenant and policy information
MetadataAddress = String.Format(Globals.WellKnownMetadata, Globals.Tenant, Globals.DefaultPolicy),
// These are standard OpenID Connect parameters, with values pulled from web.config
ClientId = Globals.ClientId,
RedirectUri = Globals.RedirectUri,
PostLogoutRedirectUri = Globals.RedirectUri,
// Specify the callbacks for each type of notifications
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = OnRedirectToIdentityProvider,
AuthorizationCodeReceived = OnAuthorizationCodeReceived,
AuthenticationFailed = OnAuthenticationFailed,
},
// Specify the claim type that specifies the Name property.
TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
ValidateIssuer = false
},
// Specify the scope by appending all of the scopes requested into one string (separated by a blank space)
Scope = $"openid profile offline_access {Globals.ReadTasksScope} {Globals.WriteTasksScope}"
}
);
}
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[Authorize]
public ActionResult Login()
{
var userClaims = User.Identity as System.Security.Claims.ClaimsIdentity;
return View();
}
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="ida:Tenant" value="fabrikamb2c.onmicrosoft.com" />
<add key="ida:TenantId" value="775527ff-9a37-4307-8b3d-cc311f58d925" />
<add key="ida:ClientId" value="fdb91ff5-5ce6-41f3-bdbd-8267c817015d" />
<add key="ida:ClientSecret" value="X330F3#92!z614M4" />
<add key="ida:AadInstance" value="https://fabrikamb2c.b2clogin.com/tfp/{0}/{1}" />
<add key="ida:RedirectUri" value="https://localhost:44316/" />
<add key="ida:SignUpSignInPolicyId" value="b2c_1_susi" />
<add key="ida:EditProfilePolicyId" value="b2c_1_edit_profile" />
<add key="ida:ResetPasswordPolicyId" value="b2c_1_reset" />
<add key="api:TaskServiceUrl" value="https://aadb2cplayground.azurewebsites.net/" />
<add key="api:ApiIdentifier" value="https://fabrikamb2c.onmicrosoft.com/tasks/" />
<add key="api:ReadScope" value="read" />
<add key="api:WriteScope" value="write" />
</appSettings>