Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OAuth 2.0如何使用密码授予使授予的身份验证令牌无效_C#_Asp.net Mvc_Oauth_Authorization_Dotnetopenauth - Fatal编程技术网

C# OAuth 2.0如何使用密码授予使授予的身份验证令牌无效

C# OAuth 2.0如何使用密码授予使授予的身份验证令牌无效,c#,asp.net-mvc,oauth,authorization,dotnetopenauth,C#,Asp.net Mvc,Oauth,Authorization,Dotnetopenauth,对于以下场景: 向资源服务器发出Ajax请求的用户代理(浏览器、用户) 使用DotNetOpenAuth(客户端)的ASP.NET MVC应用程序 OAuth授权服务器 ASP.NET Web API(资源服务器) 用户输入其凭证以登录MVC应用程序。 MVC应用程序使用用户凭据和MVC应用程序的Client.Id+Client.Secret,通过向授权服务器授予密码来发出令牌请求。 MVC应用程序从授权服务器接收OAuth令牌。 令牌被传递回客户端,客户端将令牌存储在LocalStorage中

对于以下场景:

  • 向资源服务器发出Ajax请求的用户代理(浏览器、用户)
  • 使用DotNetOpenAuth(客户端)的ASP.NET MVC应用程序
  • OAuth授权服务器
  • ASP.NET Web API(资源服务器)
  • 用户输入其凭证以登录MVC应用程序。 MVC应用程序使用用户凭据和MVC应用程序的Client.Id+Client.Secret,通过向授权服务器授予密码来发出令牌请求。 MVC应用程序从授权服务器接收OAuth令牌。 令牌被传递回客户端,客户端将令牌存储在LocalStorage中

    现在我的问题是:

  • 如何使令牌无效,以便用户无法再访问资源服务器(Web API)。由于令牌现在驻留在本地存储中,MVC应用程序不再控制令牌。解决方案可能是使用非常短的过期时间或使用一些
    signar
    东西使令牌无效,但是对于获得令牌访问权的恶意用户来说,有足够的时间来做出不好的事情。我认为没有办法立即使代币失效。而且,直到令牌真正过期,资源服务器才知道令牌已失效

  • 如果令牌已过期,那么流将是什么?我可以在浏览器中使用JavaScript检查过期日期/或等待资源服务器的401响应,并向我的MVC应用程序(客户端)发出Ajax刷新令牌请求,然后MVC应用程序从授权服务器请求一个新令牌(使用Client.Id+Client.Secret+UserCredentials)并将新令牌传递回浏览器,然后可以将其用于对资源服务器(Web API)的进一步请求。这是正确的方法吗


  • 在注销/更改密码时,我可以从本地存储中删除令牌,并使服务器端的令牌无效。

    我认为您实际上已经回答了自己的问题! 您不能使服务器端的令牌无效(除非DNOA处理令牌撤销,我认为它不会)。 该令牌是一个承载令牌,因此任何拥有它的人都可以在资源服务器上使用它,直到达到到期时间为止。保持它的短暂性是最好的方法


    另外,在使用密码授予时,您应该只使用用户的凭据一次,以获取初始令牌和刷新令牌。然后,您可以将刷新令牌与MVC应用程序中的用户id相关联,并在将来使用刷新令牌来获取新的访问令牌。

    是的,如果不耦合OAuth服务器和资源服务器,则不可能,否则,您必须在到达资源服务器时检查OAuth服务器上的令牌,以检查是否已被撤销。。。