Reassign other than Home / Index using OpenIdConnectAuthentication and Identity server after login

I'm trying to redirect a user to Dashboard, but it always redirects to Home / Index because I set RedirectUri to http: // localhost: 35641 / Identity Server Settings. But this is true in the case of the landing page of the application after logging in, it needs to redirect o control panel. I can write custom logic in the results of an index action, but I want to avoid it. MVC startup method

  public void Configuration(IAppBuilder app)
    {
                // Implicit mvc owin
                JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
                app.UseCookieAuthentication(new CookieAuthenticationOptions
                {
                    AuthenticationType = "Cookies"
                });
                app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
                {
                    ClientId = ApplicationConstants.ClientIdNucleusMvcApp,
                    Authority = ApplicationConstants.UrlBaseAuth,
                    RedirectUri = ApplicationConstants.UrlBaseWeb,
                    PostLogoutRedirectUri = ApplicationConstants.UrlBaseWeb,
                    ResponseType = "id_token token",
                    Scope = string.Format("openid email {0}", ApplicationScopes.MvcApp),
                    SignInAsAuthenticationType = "Cookies",

                    // sample how to access token on form (when adding the token response type)
                    Notifications = new OpenIdConnectAuthenticationNotifications
                    {
                        SecurityTokenValidated = async n =>
                        {
                            // Adding access token in claims
                            var accessToken = n.ProtocolMessage.AccessToken;
                            if (!string.IsNullOrEmpty(accessToken))
                            {
                                n.AuthenticationTicket.Identity.AddClaim(new Claim("access_token", accessToken));
                            }

                            // Adding identity token in claims
                            var identityToken = n.ProtocolMessage.IdToken;
                            if (!string.IsNullOrEmpty(identityToken))
                            {
                                n.AuthenticationTicket.Identity.AddClaim(new Claim("identity_token", identityToken));
                            }
                        },
                        RedirectToIdentityProvider = async n =>
                        {
                            // if signing out, add the id_token_hint
                            if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.LogoutRequest)
                            {
                                var idToken = n.OwinContext.Authentication.User.FindFirst("identity_token");
                                n.ProtocolMessage.IdTokenHint = idToken == null ? null : idToken.Value;
                                n.ProtocolMessage.PostLogoutRedirectUri = ApplicationConstants.UrlBaseWeb;
                            }
                        }
                    }
                });
            }

      

Here is my client on the identity server

 new Client
                {
                    Enabled = true,
                    ClientName = ApplicationConstants.ClientNameNucleusMvcApp,
                    ClientId = ApplicationConstants.ClientIdNucleusMvcApp,
                    ClientSecrets = new List<ClientSecret>
                    {
                        new ClientSecret(ApplicationConstants.ClientSecretNucleusMvcApp.Sha256())
                    },
                    Flow = Flows.Implicit,
                    RequireConsent = false,
                    AccessTokenType = AccessTokenType.Reference,
                    IdentityTokenLifetime = 1800,
                    AccessTokenLifetime = 1800,
                    RedirectUris = new List<string>
                    {
                        // MVC form post sample
                        ApplicationConstants.UrlBaseWeb,
                        ApplicationConstants.UrlBaseWeb + "Dashboard/Index"
                    },
                    PostLogoutRedirectUris = new List<string>
                    {
                        ApplicationConstants.UrlBaseWeb
                    }
                }

      

Help will be greatly appreciated. Thanks to

0


source to share


1 answer


RedirectUri

which you use to talk to your credentials shouldn't matter, just used to send the token back to your application. After that, there is an internal redirect (== local to the app) that is used to set the session cookie and can go anywhere on your site. How do you initiate authentication? If you started with a protected action via [authorize], you should always return there at the end. If you use an explicit login code like if

HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);

      



you can always specify the desired boarding route you want in RedirectUri

. I know it is fantastically confusing that the property that controls this internal redirect has the same name as the protocol - the only excuse we have is that the class AuthenticationProperties

already existed when the new middleware was introduced. requirements-based, and calling actual OAuth/OIDC redirect_uri

with underscore hasn't flown with the .NET community. NTN

+1


source







All Articles