我最近查看了我的推送器错误日志并注意到:
Invalid signature: Expected HMAC SHA256 hex digest of 217478.6054950:private-production1_xxxxx_1232:{"user_id":xxxx}, but got 707d39519ca7f971a134524d8fe2ebafbddd64f42b6af0a20d6a73fxxxxxxx
总的来说,我们的 websockets 一直运行良好。我们有许多客户工作得很好,套接字总体上似乎没有问题。这是我第一次注意到这个错误,我经常检查错误日志。这是我应该关心的事情吗?我可以确认 private
channel 总体上正常工作。
前端代码如下:
let options = PusherClientOptions(
authMethod: AuthMethod.authRequestBuilder(authRequestBuilder: AuthRequestBuilder()
)
pusher = Pusher(key: pusherKey!, options: options)
class AuthRequestBuilder: AuthRequestBuilderProtocol {
func requestFor(socketID: String, channel: PusherChannel) -> NSMutableURLRequest? {
let request = NSMutableURLRequest(url: URL(string: "https://\(baseURLPrefix).xxxxxx.com/xxxxx/xxxxx")!)
request.httpMethod = "POST"
request.httpBody = "socket_id=\(socketID)&channel_name=\(channel.name)".data(using: String.Encoding.utf8)
request.addValue(
"Bearer " + authToken, forHTTPHeaderField: "Authorization"
)
return request
}
}
在后端(Laravel 应用程序):
// Controller
public function presence_auth(Request $request)
{
$pusher = new Pusher(
config('broadcasting.connections.pusher.key'),
config('broadcasting.connections.pusher.secret'),
config('broadcasting.connections.pusher.app_id')
);
return $pusher->presence_auth($request->input('channel_name'), $request->input('socket_id'), AuthUser()->id);
}
如果他们将错误的 Bearer token 传递给我们的后端,是否会发生此错误?
最佳答案
您正在使用 $pusher->presence_auth
为私有(private) channel 创建签名,即以 private-
为前缀的 channel 。但是 presence_auth
旨在验证存在 channel ,即以 presence-
为前缀的 channel 。
如果您希望使用状态数据,您可以使用 presence-
channel 前缀。如果你想使用一个没有状态信息的private-
channel ,你可以使用:
$pusher->socket_auth($request->input('channel_name'), $request->input('socket_id'))
关于ios - 推送客户端错误 : Invalid Signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44072726/