Azure b2 c / MVC проблема аутентификации - OnRedirectToIdentityProvider не запускается - PullRequest
0 голосов
/ 03 августа 2020

Меня просят аутентифицировать существующее веб-приложение MVC с помощью Azure AD B2 C. Поскольку я новичок в Azure, а сайт входа в систему Azure еще недоступен сторонним поставщиком, я пробую PO C на основе этого учебного проекта: https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi.

Что я сделал:

  1. Я загрузил образец проекта и протестировал его. Он работает, как ожидалось.
  2. Я скопировал 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>

1 Ответ

0 голосов
/ 10 августа 2020

Обновление: обнаружите проблему - My Newtonsoft. Json v6.0 устарела, вызывая ошибку «скрытый PII». Обновление до v11.0 решает ошибку.

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