Identityserver4 Обратный вызов isuue - PullRequest
1 голос
/ 30 января 2020

Я использую identityserver4 с. Net core 3.0 Azure AD-аутентификация для моего приложения. Когда пользователь успешно вошел в учетную запись Microsoft, он должен быть перенаправлен на клиентское приложение angular. К сожалению, я получаю ниже ошибку при перенаправлении на клиентское приложение.

enter image description here

Ниже мой OID C конфигурация

        services.AddAuthentication()
            .AddOpenIdConnect("aad", "Demo IdentityServer", options =>
            {
                options.Events = new OpenIdConnectEvents
                {
                    OnRedirectToIdentityProvider = async ctx =>
                    {
                        var message = ctx.ProtocolMessage;
                        ctx.Properties.Items[OpenIdConnectDefaults.UserstatePropertiesKey] = message.State;
                    }

                };
                options.CallbackPath = "/signin-oidc";
                options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
                options.SignOutScheme = IdentityServerConstants.SignoutScheme;
                options.SaveTokens = true;
                options.Authority = "xxxxxxxxxxxx",
                options.ClientId = "xxxxxxxxxxxx",
                options.ResponseType = "code id_token";
                options.ClientSecret = "L-soqX=3N8kIU0y1gDbB=Ws_QqAMUw@[";
                options.GetClaimsFromUserInfoEndpoint = true;
                options.AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name"
                    //,RoleClaimType = "role"
                };

            });
        return services;

Это мой метод обратного вызова.

 public async Task<IActionResult> Callback()
    {
        // read external identity from the temporary cookie
        try
        {
            var result = await HttpContext.AuthenticateAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);
            if (result?.Succeeded != true)
            {
                throw new Exception("External authentication error");
            }

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                var externalClaims = result.Principal.Claims.Select(c => $"{c.Type}: {c.Value}");
                _logger.LogDebug("External claims: {@claims}", externalClaims);
            }

            // lookup our user and external provider info
            var (user, provider, providerUserId, claims) = FindUserFromExternalProvider(result);
            if (user == null)
            {
                user = AutoProvisionUser(provider, providerUserId, claims);
            }
            var additionalLocalClaims = new List<Claim>();
            var localSignInProps = new AuthenticationProperties();
            ProcessLoginCallbackForOidc(result, additionalLocalClaims, localSignInProps);
            var isuser = new IdentityServerUser(user.SubjectId)
            {
                DisplayName = user.Username,
                IdentityProvider = provider,
                AdditionalClaims = additionalLocalClaims
            };

            await _events.RaiseAsync(new UserLoginSuccessEvent(provider, providerUserId, user.SubjectId, user.Username));
            await HttpContext.SignInAsync(user.SubjectId, user.Username, provider, localSignInProps, additionalLocalClaims.ToArray());
            await HttpContext.SignOutAsync(IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme);

            // retrieve return URL
            var returnUrl = result.Properties.Items["returnUrl"] ?? "~/";

            // check if external login is in the context of an OIDC request
            var context = await _interaction.GetAuthorizationContextAsync(returnUrl);

            //await _events.RaiseAsync(new UserLoginSuccessEvent(provider, providerUserId, user.SubjectId, user.Username, true, context?.ClientId));



            return Redirect(returnUrl);
        }
        catch (Exception ex)
        {

            throw;
        }
    }

Любая помощь будет признательна заранее.

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