質問: Rails5 で「ActionCable」というリアルタイム通信用の技術をとiOSアプリ(Objective-C)でリアルタイムチャットアプリの開発をおこなっています。 Rails5 iOS側はSRWebsocketというライブラリを使用しているのですが認証方式の実装方法がわかりません。 Railsのエンジニアからはヘッダー認証を採用しているのでWebsocket側でヘッダーを指定してくださいと言われています。 また、ヘッダーの指定が難しい場合は、 ・ヘッダー認証(現在採用) ・クッキーを利用した認証 ・accesstokenを変数として持たせての認証 ざっくり3つ方法があるといわれていて、どの方法でも構いませんといわれています。 SRWebSocke iOSでソケット通信を行う際、 1SRWebSocketのインスタンス生成 2URLに wss://○○○.jp/cableを指定 3Socketをオープン 4SRWebSocketライブラリにインスタンスに対して、sendを投げる。 この情報しか出てこないのです。 参考:URL:https://qiita.com/n0bisuke/items/6dc990579b343475a635 どのブログを見ても、コード的にも認証を含めるような処理は一切ないのです。 iOS側の実装で認証をする方法を教えていただければとおもいます。 よろしくお願いします。
回答: ヘッダー認証の詳細が分からないので正確な回答は難しいですが,単純に,ヘッダーを指定する(WebSocketのヘッダーに認証情報を追加する)ということであれば ``` NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"wss://○○○.jp/cable"]]; [request setValue:@"認証ヘッダーの値" forHTTPHeaderField:@"認証ヘッダーのキー名"]; SRWebSocket *socket = [[SRWebSocket alloc] initWithURLRequest:request]; ``` でよいのではないでしょうか. あくまでWebSocketはHTTP上で双方向通信を行うプロトコルであって,認証に関する規定は何もありません. RFC6455 10.5 WebSocket クライアント認証 HTTPのレイヤーで認証を行い,その結果の上でWebSocketの通信を行えばよいかと思います.