【问题标题】:Can't refresh token, different origin无法刷新令牌,不同的来源
【发布时间】:2014-07-08 08:52:08
【问题描述】:

我有一个网络应用程序连接到我的服务器端应用程序。网络应用程序在服务器存储令牌并刷新访问令牌时获取身份验证代码。当我的访问令牌过期时,当我从本地主机发出 api 调用(Web 和服务器端部分都在同一个域上)时,我通常可以刷新令牌。当我部署我的代码以使 Web 部件位于域 A 上而服务器 api 位于域 B 上时,过期后刷新访问令牌不起作用。估计是原产地问题。我从谷歌控制台获得了网络应用程序密钥。 有谁知道是否有为 oauth 启用跨域的设置?

更新:也许它与 cors 无关。问题是我可以从 localhost 而不是从我的云部署的应用程序运行我的应用程序。

【问题讨论】:

  • 当您部署时,http 架构是否会更改为 https
  • 是的。这会影响我的应用吗?

标签: c# google-api google-oauth google-contacts-api


【解决方案1】:

我假设您使用的是 ASP.NET WebApi 2.0?如果有请参考这篇文章:

http://blog.rfaisal.com/2014/01/14/building-your-own-api-and-securing-it-with-oauth-2-0-in-asp-net-webapi-2/

基本上你需要:

  1. 安装这个 nuget 包:Microsoft.AspNet.WebApi.Cors

  2. 在您的 WebApiConfig.Register 方法中,对您的 HttpConfiguration 对象使用扩展方法 EnableCors():

    public static void Register(HttpConfiguration config)
    {
       config.EnableCors();
    }
    
  3. 用这个属性装饰你的控制器:

    [EnableCors(origins: "*", headers: "*", methods: "*")]
    

希望对你有用!

【讨论】:

  • 感谢您的努力,但我认为应该是谷歌。我想知道是否可以在我的请求中设置一个标志(也许我不清楚)。
【解决方案2】:

由于架构不同,可能有相同域的政策会毁了您的一天。

如果两个页面具有相同的主机、协议和端口,则认为它们来自同一来源。

From Wikipedia on the same origin policy:

“起源”一词是使用域名、应用层定义的 协议和(在大多数浏览器中)正在运行的 HTML 文档的 TCP 端口 剧本。如果两个资源被认为是同一个来源 并且只有当所有这些值都完全相同时。

【讨论】:

  • 它确实毁了我的一天,最后几天也是如此:)。谢谢(你的)信息。我必须深入挖掘 google oauth 规范。
猜你喜欢
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 2022-12-14
  • 2020-06-13
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多