Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
Php Symfony认证_Php_Symfony - Fatal编程技术网

Php Symfony认证

Php Symfony认证,php,symfony,Php,Symfony,我们正在创建一个软件应用程序(使用node webkit),在Apache服务器中使用后端数据库,选择Symfony作为框架。 用户使用序列号登录。现在,由于不会有任何会话/过期等,我们目前正在做的是,在每次操作中,我们都会将序列号从应用程序重新发送到服务器。这是可行的,但我相信这不是最好的做法。任何简单的嗅探都可以发现序列号。 在这种情况下,进行身份验证的最佳方式是什么?(我们不希望使用会话) 非常感谢您所描述的是会话的实际工作方式,除了最常用的cookies发送会话id之外,但是它必须根据请

我们正在创建一个软件应用程序(使用node webkit),在Apache服务器中使用后端数据库,选择Symfony作为框架。 用户使用序列号登录。现在,由于不会有任何会话/过期等,我们目前正在做的是,在每次操作中,我们都会将序列号从应用程序重新发送到服务器。这是可行的,但我相信这不是最好的做法。任何简单的嗅探都可以发现序列号。 在这种情况下,进行身份验证的最佳方式是什么?(我们不希望使用会话)


非常感谢

您所描述的是会话的实际工作方式,除了最常用的cookies发送会话id之外,但是它必须根据请求发送,因为http是无状态的。(会话id是随机的除外)

您可以尝试使用OpenAuthentication(OAuth)。有一个流行的包叫做

OAuth有不同的授权类型。授权类型密码最接近,但需要发送用户名/密码。密码可以为空,用户名可以是序列号,但是最好创建一个自定义授权类型,通过序列号查找用户。看

您可以使用序列号为后续访问生成身份验证令牌。应该有一些节点的客户端实现,您可以使用它们来处理所有这些问题,但这相当简单

这样,返回的身份验证令牌将在http头中发送,并且不交换序列号

还请注意,身份验证密钥确实过期,但有一个刷新令牌

此外,如果您担心嗅探,您应该使用https来保护连接

使用FosOauthServer的自定义授权类型的请求示例:

http://localhost:8000/oauth/v2/token?client_id=1_2n0hvjywrfeoowswk84ggcs0cwwwccwg80g4s4kw04g0o0kos4&client_secret=60m8u9xkzns4gwos4csw40o0ccwg4cgkksggwgwcgcc0s0ksog&grant_type=http://custom.com/grants/serial&serial=123456
答复:

{
"access_token": "NjY2MzA3NzE5OWI2YjdhNWViYTg0MmI2NmIyNDE5MjAyNWM4OTcxMzg1MjY2ODk3NmZiNDIwODM0Y2VmNmZkMg",
"expires_in": 3600,
"token_type": "bearer",
"scope": null,
"refresh_token": "ZWRjNWNhMjcxYzRhNWNjNzk3ZmQzMzM5ODgzYzI1YzNlZjcwNzhkYjNhNjA2YzNiZTY0MTM5ZDllYWNhYzliMg"
}
现在,对于安全的URL,您可以为每个请求向http头添加令牌。或者,也可以使用OAuthClient为您执行此操作并处理刷新

Authorization Bearer NjY2MzA3NzE5OWI2YjdhNWViYTg0MmI2NmIyNDE5MjAyNWM4OTcxMzg1MjY2ODk3NmZiNDIwODM0Y2VmNmZkMg

您所描述的实际上是会话的工作方式,除了最常用的cookies来发送会话id之外,但是它必须按请求发送,因为http是无状态的。(会话id是随机的除外)

您可以尝试使用OpenAuthentication(OAuth)。有一个流行的包叫做

OAuth有不同的授权类型。授权类型密码最接近,但需要发送用户名/密码。密码可以为空,用户名可以是序列号,但是最好创建一个自定义授权类型,通过序列号查找用户。看

您可以使用序列号为后续访问生成身份验证令牌。应该有一些节点的客户端实现,您可以使用它们来处理所有这些问题,但这相当简单

这样,返回的身份验证令牌将在http头中发送,并且不交换序列号

还请注意,身份验证密钥确实过期,但有一个刷新令牌

此外,如果您担心嗅探,您应该使用https来保护连接

使用FosOauthServer的自定义授权类型的请求示例:

http://localhost:8000/oauth/v2/token?client_id=1_2n0hvjywrfeoowswk84ggcs0cwwwccwg80g4s4kw04g0o0kos4&client_secret=60m8u9xkzns4gwos4csw40o0ccwg4cgkksggwgwcgcc0s0ksog&grant_type=http://custom.com/grants/serial&serial=123456
答复:

{
"access_token": "NjY2MzA3NzE5OWI2YjdhNWViYTg0MmI2NmIyNDE5MjAyNWM4OTcxMzg1MjY2ODk3NmZiNDIwODM0Y2VmNmZkMg",
"expires_in": 3600,
"token_type": "bearer",
"scope": null,
"refresh_token": "ZWRjNWNhMjcxYzRhNWNjNzk3ZmQzMzM5ODgzYzI1YzNlZjcwNzhkYjNhNjA2YzNiZTY0MTM5ZDllYWNhYzliMg"
}
现在,对于安全的URL,您可以为每个请求向http头添加令牌。或者,也可以使用OAuthClient为您执行此操作并处理刷新

Authorization Bearer NjY2MzA3NzE5OWI2YjdhNWViYTg0MmI2NmIyNDE5MjAyNWM4OTcxMzg1MjY2ODk3NmZiNDIwODM0Y2VmNmZkMg

您将返回一个Json Web令牌(),而不是返回一个序列号。令牌有效负载将包括序列号和请求来源

然后,客户机在每个请求上返回令牌。JWT是经过签名的,因此即使其他人从令牌中获取序列号,他们也无法在未被检测到的情况下更改来源。服务器使用密钥生成和验证签名


顺便说一句,在传输敏感信息(如序列号)时,应始终使用https。不管你如何隐藏某些东西,嗅探器总是可以抓取它。

你可以将Json Web令牌()交回,而不是交回序列号。令牌有效负载将包括序列号和请求来源

然后,客户机在每个请求上返回令牌。JWT是经过签名的,因此即使其他人从令牌中获取序列号,他们也无法在未被检测到的情况下更改来源。服务器使用密钥生成和验证签名


顺便说一句,在传输敏感信息(如序列号)时,应始终使用https。不管你如何隐藏,嗅探者总能抓住它。

谢谢你详细的回答。一些东西来澄清我对代币的基本理解。显然,这样做的全部目的是隐藏在每次操作中暴露的敏感信息(序列号)。但这不适用于代币吗?我的意思是,嗅探器可以抓取令牌并使用它进行访问。如果你说令牌有一个到期日,那么嗅探器也可以访问刷新令牌,所以他基本上得到了访问服务器所需的东西。请解释一下汉克斯详细的回答。一些东西来澄清我对代币的基本理解。显然,这样做的全部目的是隐藏在每次操作中暴露的敏感信息(序列号)。但这不适用于代币吗?我的意思是,嗅探器可以抓取令牌并使用它进行访问。如果你说令牌有一个到期日,那么嗅探器也可以访问刷新令牌,所以他基本上得到了访问服务器所需的东西。请解释您能否进一步解释“JWT已签名,因此即使其他人从令牌中获取序列号,他们也无法在未被检测到的情况下更改来源”。为什么他不能按原样重新发送令牌以获得访问权。令牌有一个有效负载,其中可能包括序列号以及请求的来源