当前位置: 首页 > 知识库问答 >
问题:

将C#Owin响应类型从代码更改为令牌

公孙向荣
2023-03-14

我正在尝试使用OWIN外部登录到Google/Facebook。

面临的问题是owin挑战不断将响应类型从令牌更改为代码。

挑战生成以下URL:https://accounts.google.com/o/oauth2/auth?response_type=code

这将返回来自google的错误。如果我改变response_type令牌(response_type=令牌)它的工作。

下面是OAuth选项

 OAuthOptions = new OAuthAuthorizationServerOptions
        {

            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),

            // In production mode set AllowInsecureHttp = false
            AllowInsecureHttp = true,


        };

谷歌中间件设置:

 app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
        {
            ClientId = "clientid",
            ClientSecret = "client secret",  
        }); 

挑战是:

   var properties = new AuthenticationProperties() {   AllowRefresh = true, RedirectUri="mywebsite.co.za"  };


        Request.GetOwinContext().Authentication.Challenge(properties,LoginProvider);

        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        response.RequestMessage = Request;
        return Task.FromResult(response);

OWIN是通用MVC API项目的基本设置。

共有1个答案

郗缪文
2023-03-14

将响应类型重写为令牌的解决方案如下:

 GoogleOAuth2AuthenticationOptions googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
        {
            ClientId = "clientid",
            ClientSecret = "secret",

            Provider = new GoogleOAuth2AuthenticationProvider
            {
                OnApplyRedirect = context =>
                {
                    string redirect = context.RedirectUri.Replace("response_type=code", "response_type=token");
                    context.Response.Redirect(redirect);
                },

            },
        };

        app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);

它仍然回避了一个问题,如果googleoauth2.0需要response_type=token,那么Owin.google提供者为什么要使用response_type=code呢。

 类似资料:
  • 问题内容: 在后面的代码中设置很容易,但是这会覆盖现有类。 我需要设置某些元素,并且我想应用一种样式作为视觉提示,说明该项目不能更改…很容易: 但是有时我 还 需要更改相同的元素,这意味着我将需要删除设置的CSS类,而不删除可能已分配的任何其他样式。 最好的方法是什么? 问题答案: 我采用了AnthonyWJones的原始代码并对其进行了修改,以使其在任何情况下均能正常工作:

  • 是否可以更改AbstractHttpMessageConverter writeInternal()方法中的响应状态代码? 在我的抽象中(扩展MappingJackson2HttpMessageConverter),我希望将错误响应更改为200,并将实际的状态代码(例如400)添加到JSON中的状态字段中。 编辑1 我返回的代码如下: 所以对于这两个变体来说,这意味着: 在这两种情况下,都将返回h

  • 我们使用的是Oracle,我们有一个要求,允许希腊字符存储在数据库中。目前,我们的DB实例不允许我们插入希腊字符,如“?”。在谷歌上,我发现这与字符集有关。我的oracle使用不支持希腊字符的nls_characterset-we8mswin1252。如果必须工作,我必须将字符集更改为AL32UTF8、UTF8、AL16UTF16或WE8ISO8859P7之一。既然数据库中已经有了这么多的数据,现

  • 我有一个用Java编写的Spring Boot应用程序,它是一个REST API。该服务(Svc A)调用REST API服务(Svc B),该服务也是用Java编写的Spring Boot应用程序。当没有找到数据时,Svc B返回404状态码。我需要将此响应更改为200状态代码,并返回一个空响应对象。我不确定是否或如何做到这一点。 我可以捕捉错误,并确定404是否是这个没有数据发现的错误。但是,

  • 编辑2:我已经用改型拦截器手动修改响应体来完成这个任务。它是有效的,但如果你有任何其他建议,请发布它们:)

  • 下面是我做的方式: 我只是想知道,这是正确的方法吗,因为在运行逻辑回归时,我得到了一些错误,所以我想知道,这是麻烦的原因吗。