Open5
WebSocketにおける認証方法について
発端:
FlutterにおいてPlatform: web(Browser)では、WebSocketに追加のヘッダーを付与することができない。
WebSocketChannelのHtmlWebSocketChannelのconnectメソッドにはheaderを指定する箇所がない。
これは、dart:ioとdart:htmlの実装差異から来るものであり、WebSocketにおいてブラウザ間でheaderの取扱に差異があることに由来するもの。
そもそもブラウザ間でheaderの取扱に差異があるのは、BrowserにおけるWebSocket APIの仕様にheaderを指定する機能がないからである
browserにおけるWebScoket認証でとりうる方法
- Cookie
ブラウザからのWebSocketコネクション確立時にCookieは(他のHTTP通信と同じように)付与される - Basic Auth(deprecated)
ws://username:password@hostname
としたときに、自動でAuthorization: Bearer base64(username:password)
としてくれる
AppSyncのWebSocketではどうやっているの?
query部分にTokenを入れている。。
Hasura
WebSocketの通信ではcookieをわたせる
ApolloClientはこのように認証情報を渡す
ApolloClientとHasuraで試してみたところ。。。
接続開始時にConnection Parameterとしてhttp headerにつけていたsecretをやりとりしている