tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

アプリから Intune の SAML 認証経由でログイン出来る構成を作る

構成

  • AWS Route53 + ACM + CloudFront + S3
    • Universal Links の AASA file は S3 へ配置する.
    • ACM は us-east-1 にて当該証明書を手動で発行する.
      • ACM を CloudFront で利用する場合は us-east-1 で作成する必要があるため.
  • 構築には Terraform を利用.

アプリログイン -> Universal Link アクセスの流れ

  • アプリにログイン
  • アプリ API が SAML 認証要求
  • Azure AD の IdP へリダイレクト
  • Safari Viewが開かれる
  • SAML 認証用ユーザー ID , password を入れてログイン
  • 端末の証明書と Intune に登録済の証明書を比較し、認証を行う
  • アプリ API がログイン成功のレスポンスを返す
  • Universal Links のエンドポイントへリダイレクト
    • xxx.com/.well-known/apple-app-site-association へリクエスト
    • Route53 が CloudFront の Domain name (xxx.cloudfront.net) を返す
    • CloudFront の Origin Domain (S3) 経由で Universal Link の JSON (apple-app-site-association) へアクセス
  • Safari view が Universal Link へアクセスし、アプリを起動する

Universal Links 配置要件

AASA file (apple-app-site-accosiation) の配置要件は以下の通り.

  • HTTPS 経由でアクセス出来ること
  • リダイレクトなしでアクセスが可能であること
  • Content-Typeapplication/json であること。
    • 署名がある場合は application/pkcs7-mime
  • 当該オブジェクト (apple-app-site-association) の Metadataで Cache-Control: no-cache, no-store, must-revalidate を指定.
    • cache しないようにしないと 304 statusで返る場合があり, 200 statusでレスポンスされない場合アプリ的に Universal Link を kick 出来ない場合がある.
  • RFC5785 の実装により iOS 9.3 以上の場合は先ず /.well-known/ へアクセスして apple-app-site-association があるか探し、無ければルートを探す.
    • ルートに当該のJSONを配置すると、2回リクエストが発生し次のようなアクセスログとなる為, リクエストを1回で済ませ不要な 403 status のログも出ないよう /.well-known/ 配下へ Universal Link を配置する.
yyyy-mm-dd tt:mm:ss xxx 616  0.0.0.0 GET xxx.cloudfront.net  /.well-known/apple-app-site-association 403 -   Network/901.1%2520Darwin/17.6.0 -   -   Error   ==  example.com https   256 0.087   -   TLSv1.2 xxx Error   HTTP/1.1    -   -
yyyy-mm-dd tt:mm:ss xxx 760 0.0.0.0 GET xxx.cloudfront.net  /apple-app-site-association 200 -   Network/901.1%2520Darwin/17.6.0 -   -   Miss    ==  example.com https   244 0.098   -   TLSv1.2 xxx Miss    HTTP/1.1    -   -