###起こっている現象
バックエンド:RailsAPIモード、フロント:Reactを使用したアプリを公開しているのですが、先日Safariの最新版からのみログイン、新規登録等が行えなくなってしまいました。
###自分で調べた結果
原因を調べたところ、SafariのバージョンアップにおけるCORS対応の強化により、APIのリクエスト制限の設定がSafariのAPI使用条件をクリアできなかったことで、API接続エラーとなっているようです。
※railsのサーバーとreactのサーバーは別ドメインで管理しています。
※該当するバージョンアップ情報
■Safariリリース情報
https://support.apple.com/ja-jp/HT211102
・本件の対象となったバージョンアップ情報
WebKit 対象となるデバイス:iPhone 6s 以降、iPad Air 2 以降、iPad mini 4 以降、iPod touch (第 7 世代) 影響:ダウンロードのオリジンが間違って関連付けられる可能性がある。 説明:制限を強化し、ロジックの脆弱性に対処しました。
###試したこと
CORSの対応強化への対策として、apiサーバーのapacheの設定ファイルの内容を変更いたしました。
【変更ファイル】
/etc/httpd/conf/httpd-le-ssl.conf
/etc/httpd/conf.d/passenger.conf
※両ファイルに同じ記載があったのでどちらも変更
【変更内容】
・変更前
Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token, access-token, application/json, client, uid"
・変更後
Header set Access-Control-Allow-Origin "http://react-app.domain.com" //Reactアプリのドメインに変更 Header set Access-Control-Allow-Credentials: true //←この1行追加 Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, User-Agent, Referer, Origin, authorization, Accept, client-security-token, access-token, application/json, client, uid" //何点か変更
変更後の状態でapacheを再起動、safariのログインを検証しましたが、エラーは解消されませんでした。
###safariでのエラー内容 (04/27追記)
safariでのエラー出力は下記の通りです。
※apache設定ファイル変更前に表示されたエラーになります。
最新版safariからログインができるようにするための、有効な手段があればご教示いただけると大変助かります。
※アップデートしたiOSのchromeアプリからもログインできなくなっているぽいです、、、
よろしくお願いいたします。
##4/27追記
ockeghem 様からいただいた回答内容を元に設定を変更しましたが、挙動は変わらずログインできませんでした。
・変更後
/etc/httpd/conf.d/passenger.conf
Header set Set-Cookie HttpOnly;Secure Header set Access-Control-Allow-Origin "http://react-app.domain.com" Header set Access-Control-Allow-Credentials: true Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" Header set Access-Control-Max-Age "1000" #Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, originn , authorization, accept, client-security-token, application/json" Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, User-Agg ent, Referer, Origin, authorization, Accept, client-security-token, access-tokenn , client, uid" # application/jsonを除去 Header set Access-Control-Expose-Headers "access-token, client, uid" ・ ・ ・
/etc/httpd/conf/httpd-le-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> Header set Set-Cookie HttpOnly;Secure Header set Access-Control-Allow-Origin "http://react-app.domain.com" Header set Access-Control-Allow-Credentials: true Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" Header set Access-Control-Max-Age "1000" #Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, orr igin, authorization, accept, client-security-token, application/json" Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, Usee r-Agent, Referer, Origin, authorization, Accept, client-security-token, access-tt oken, client, uid" # application/jsonを除去 Header set Access-Control-Expose-Headers "access-token, client, uid" ・ ・ ・
回答1件
あなたの回答
tips
プレビュー