无法刷新令牌,不同的来源

时间:2014-07-08 08:52:08

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

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

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

2 个答案:

答案 0 :(得分: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: "*")]
    
  4. 我希望这很有用!

答案 1 :(得分:1)

由于架构不同,可能存在破坏您一天的同域策略。

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

From Wikipedia on the same origin policy:

  

术语"起源"使用域名,应用程序层定义   协议,以及(在大多数浏览器中)运行的HTML文档的TCP端口   剧本。如果,两种资源被认为是相同的来源   并且只有所有这些值完全相同。