我在公司的SSO中使用了identityserver3的OAuth2.0,我无法理解state参数如何阻止CSRF.
我已将攻击流程复制如下:
1.Mallory访问某个客户的网站,并开始授权该客户使用OAuth访问某个服务提供商的过程
2.客户要求服务提供商允许代表Mallory请求访问权限
3.Mallory被重定向到服务提供商的网站,在那里她通常会输入她的用户名/密码以授权访问
4.相反,Mallory陷阱/阻止此请求并保存其URL(Callback Url)
5.现在,Mallory以某种方式让Alice访问该URL.如果Alice使用自己的帐户登录服务提供商,则其凭据将用于颁发授权码
6.授权代码被交换为访问令牌
7.现在,Mallory在客户端的帐户有权访问服务提供商处的Alice帐户
我可以理解第1步到第4步.但是从第5步开始,我有些困惑.根据我的理解,在步骤5中,Alice在登录时访问回调URL,然后服务器只使用授权码访问OAuth服务提供商以在后端获取openid和访问令牌,然后Alice的浏览器只是使用Mallory的帐户和访问令牌执行登录.与Mallory的浏览器有什么关系?你能详细解释一下吗?感谢您花时间阅读我的话!
我网站上的一些用户正在体验Laravel\Socialite\Two\InvalidStateException.我已经采取了对Laravel Socialite的回复中概述的步骤:InvalidStateException并且无法解决问题.只有一小部分用户似乎遇到了这种情况.
我有2个fpm/nginx docker容器坐在HAProxy负载均衡器后面.
我正在尝试使用Socialize在laravel 5中使用facebook登录.
这是我的路线文件代码.
Route::get('fb', function ($facebook = "facebook")
{
$provider = \Socialize::with($facebook);
if (Input::has('code'))
{
$user = $provider->user();
return var_dump($user);
} else {
return $provider->scopes(['public_profile','user_friends'])->redirect();
}
});
Run Code Online (Sandbox Code Playgroud)
登录成功,我得到代码,但get $provider->user()我得到错误的时间.
AbstractProvider.php第161行中的InvalidStateException
我是Laravel Socialite的新手,从社交媒体登录重定向回时出现此错误
Laravel \ Socialite \ Two \ InvalidStateException位于/vendor/laravel/socialite/src/Two/AbstractProvider.php:209**
即使我已经尝试过此解决方案/sf/answers/2221718551/, 但我仍然面临着同样的错误。
这是Socialite控制器的代码
// Redirect to Social provider for login
public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}
// Handling get request from social provider
public function handleProviderCallback($provider, Request $request)
{
$user = Socialite::driver($provider)->user();
}
Run Code Online (Sandbox Code Playgroud)
实际上,代码在一开始就起作用了,但是在我将非www重定向到www之后,它就停止了工作。这是.htaccess文件
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] …Run Code Online (Sandbox Code Playgroud) 之前,在我更改session.php中的domian之前,我的Auth :: login()工作正常,它将保留cookie,因此他们无需再次登录。当我的一些朋友告诉我,当他们单击登录(来自Facebook)时,它将以某种方式在AbstractProvider.php中返回InvalidStateException。
我在Google周围搜索,知道cookie可能引起某些问题,解决方案是将session.php中的域从null更改为我的域(例如myapps.com)。
当我更改为myapps.com之后,invalidstateException将不再发生,但不会继续我的登录。6到12个小时后,它要求我再次登录。
下面是我的代码(我相信在更改会话之后,我的代码是正确的,并且登录将不再持久)。
$UserLogin = User::where('facebook_id', '=', $user->getId())->first();
Auth::login($UserLogin, true);
Run Code Online (Sandbox Code Playgroud)