Owin, pass custom query parameters in Authentication Request

后端 未结 2 790
北海茫月
北海茫月 2020-12-29 08:57

We have our own OpenID Connect Provider. We want to pass custom query parameter in Authentication request using Owin middleware. And we cannot find the way how to implement

相关标签:
2条回答
  • 2020-12-29 09:37

    You're almost there! What's left is overriding built-in GoogleOAuth2AuthenticationProvider and here is the example how to do it:

    class CustomGoogleAuthProvider : GoogleOAuth2AuthenticationProvider
    {
        public CustomGoogleAuthProvider()
        {
            OnApplyRedirect = (GoogleOAuth2ApplyRedirectContext context) =>
            {
                IDictionary<string, string> props = context.OwinContext.Authentication.AuthenticationResponseChallenge.Properties.Dictionary;
    
                string newRedirectUri = context.RedirectUri;
    
                string[] paramertsToPassThrough = new[] { "login_hint", "hd", "anything" };
    
                foreach (var param in paramertsToPassThrough)
                {
                    if (props.ContainsKey(param))
                    {
                        newRedirectUri += string.Format("&{0}={1}", param, HttpUtility.UrlEncode(props[param]));
                    }
                }
    
                context.Response.Redirect(newRedirectUri);
            };
        }
    }
    

    OWIN middleware registration:

    app.UseGoogleAuthentication(new Microsoft.Owin.Security.Google.GoogleOAuth2AuthenticationOptions()
    {
        // other config ...
        Provider = new CustomGoogleAuthProvider(),
    });
    

    The result (by the way with current version (3.0.1) of Google OAuth middleware login_hint flows from Authentication parameters out-of-the-box):

    result

    0 讨论(0)
  • 2020-12-29 09:45

    So, having struggled with a similar type of issue, brockallen sent me some code that gives me what I need using identity server 3....

    class CustomGoogleAuthProvider : GoogleOAuth2AuthenticationProvider
    {
        public CustomGoogleAuthProvider()
        {
            OnApplyRedirect = (GoogleOAuth2ApplyRedirectContext context) =>
            {
                var signinId = context.OwinContext.Request.Query["signin"];
                var msg = context.OwinContext.Environment.GetSignInMessage(signinId);
                var hint = msg.LoginHint;
    
                var newRedirectUri = context.RedirectUri;
                newRedirectUri += string.Format("&login_hint={0}", HttpUtility.UrlEncode(hint));
    
                context.Response.Redirect(newRedirectUri);
            };
        }
    }
    
    0 讨论(0)
提交回复
热议问题