Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

プラットフォーム開発における認証設計の苦労

 プラットフォーム開発における認証設計の苦労

Kiyofumi Sano

October 18, 2024
Tweet

Other Decks in Technology

Transcript

  1. 具体的には何ができるの? 01 Yappli CRMとは 顧客管理 施策セグメント CRMアクション 分析‧ダッシュボード 外部連携 顧客ID発行

    顧客属性 固定カラム15個+カスタムセグメント 50カラムまで追加可 ポイント発行/加減算 ランク管理 タイムライン •   •   •   •   •   •   • 会員ランク 会員登録/更新日 最終ログイン日時 最終ポイント取得日 総ポイント獲得数 チェックイン QR/バーコード読み取り等 トリガーURL •   •   •   •   •   •   • •    プッシュ配信 メール配信 In-Appメッセージ 一斉配信 トリガー配信 クーポン発行 •   •   •   •   •   •    会員登録者数 会員アクティブ率 配信レポート RFM分析 •   •   •   •      POS EC CDP、MA メール e-Gift •   •   •   •   •  
  2. giftee Point Base連携 02 giftee Point Base連携の概要 Yappli CRMで 獲得したポイントを

    gifteeというeギフトサービスで ギフトに交換できるようにする 保有している任意のCRMポイントを、gifteeポイントへ交換できる (例:1000pt ⇨ CRM:500pt giftee:500pt)
  3. giftee Point Base連携‧画⾯イメージ 02 giftee Point Base連携の概要 CRMポイントからgifteeポイントへ交換はユーザー側で実施 以後、gifteeマイページ内(WebView)でeGiftへの交換などが可能 ログイン

    以下からgifteeマイ ページへログイン してください。 ※セッション有効 期間は24hとなりま す。 最終アクセスから24h以内で あれば本画⾯はスキップ (セッション切れたら表⽰) 5 100 任意のポイント数を⼊⼒ (例:100ptをgifteeポイントへ交換) CRMポイントと交換導線を設置 (CRM: 00pt、giftee:0pt) CRMポイントが減算される (CRM:0pt、giftee: 00pt) gifteeマイページを表⽰ ※web (eギフト等へ交換が可能)
  4. gifteeマイページ機能 1 • gifteeサービスで⽤意されているマイページにYappliのアプリから遷移させ る機能 ◦ 今回はこちらについて解説していきます ポイント換算機能 2 •

    Yappli CRMポイント→gifteeポイントへ換算する機能 • 今回は割愛させていただきます • こちらの詳細はヤプリテックブログにて後⽇投稿します! ◦ https://tech.yappli.io/ 02 giftee Point Base連携の概要
  5. 03 苦労した点とその解決策 • CSRF対策 ◦ ウェブビュー機能は不特定多数からのアクセスを想定しているためIP制限をかけるこ とができない • ネイティブアプリから送られてくるmember_idが信頼できる値になる ような設計

    ◦ member_idが偽装されるとgifteeマイページになりすましログインされる危険があ る ◦ 分散サービスのため、⾃分が普段開発していないプロジェクトのソースコードを深 い所まで追う必要があった セキュリティを担保した設計
  6. 03 苦労した点とその解決策 • CSRFトークンを利⽤する a. トークンを発⾏するAPIをアプリから実⾏ b. アプリ側にトークンをcookieとして格納する c. 以後gifteeマイページAPIを実⾏するときはトークンをリクエストヘッダに⼊れても

    らい、サーバーで検証する ▪ カスタムヘッダーを設定するとプリフライトリクエストが必ず⾏われる • クロスサイトリクエストではプリフライトリクエストを実⾏することが できないため、GETリクエストのAPIに対するCSRF対策になる 解決案1(没案)
  7. 03 苦労した点とその解決策 • tokenを⽤いず合わせ技で対応 ◦ cookieのSameSite属性をLaxにする ▪ Laxにするとクロスサイトリクエストでcookieは送信されな くなる •

    →しかし、GETだとcookieを送信してしまうのでgiftee マイページAPIでは意味がない ◦ リファラチェック ▪ →偽造できてしまう 解決案2が没になった理由
  8. 03 苦労した点とその解決策 解決案3(採⽤) • このmember_idはdevice_idをもとにDBから取得する値のため 信頼できる値 • 内部システムからしか叩かれないため、信頼できるリクエスト である •

    そのため、IP制限をかけることができる • ウェブビュー機能ではなく、フォーム2機能を経由してgifteeマイペー ジへのアクセスを受け付けるようにする ◦ CMS(管理画⾯)で以下の設定を⾏うことで実現する i. ウェブビュー機能に「保存されたセッションからmemberを取得して、giftee マイページURLを取得するAPI」を設定する ii. フォーム2で外部API連携に「渡ってきたmember_idをセッションに保存する API」を設定する iii. フォーム2で遷移先のリンクに、iiのウェブビュー機能を設定する CSRF対策
  9. 04 まとめ • プラットフォームなので、それぞれの機能は汎⽤的で柔軟性があるものでなけ ればならない ◦ ひとつの機能のために局所的な最適化をすることは保守性を悪くする ◦ ⼀度これを許してしまうと、そこから窓割れが発⽣しかねない •

    汎⽤的な機能同⼠をうまく組み合わせて、ひとつの機能をつくっていくのはそ れぞれの機能に対して深い理解が求められる ◦ その上で全体のアーキテクチャについても理解していなければセキュリティを担保した良い設計 ができない ◦ 単なる機能ではなく、プロダクト全体の構成を考えた設計が必要 プラットフォーム開発の難しさ
  10. 04 まとめ • 既存の汎⽤的な機能を組み合わせて⼀つの機能をつくっていくためには、柔軟 な発想が求められる • Yappliはアプリプラットフォームという特性上、制約がある ◦ 開発の制約がある中で、どうやって設計をしていくか考える⾯⽩さ ◦

    利⽤者が制約を受け⼊れてでも利⽤してもらいたいと思ってもらえるには、⼤きなメリットを提 供する必要がある • だからこそ、設計のやりがいがある ◦ ヤプリでしか経験できないノーコードプラットフォームとしての仕組み作りは⾯⽩い プラットフォーム開発の面白さ
  11. • ここに本⽂を⼊⼒します(レベル1) ◦ レベル2はこんな感じです ▪ レベル3はこんな感じです(リンク) • アクセント2です • アクセント3は蛍光ペンで使う想定です

    このページのタイトルを⼊れます 01 Yappli CRMとは アクセント4は こんな感じで使う想定です アクセント5使⽤例 アクセント6使⽤例 アクセント6は こんな感じでも使えそうです
  12. 02 Yappliの開発について - STEP3 改善の説明 着⼿途中に何らかの理由で⽌まってしまった 1 • ⼀番古いチケットで、2018年作成のものもあった •

    OS関係のチケットは、最新OSでは解消しているが、チケットは未対応のま ま残り続けた • ⼀番古いチケットで、2018年作成のものもあった
  13. 着⼿途中に何らかの理由で⽌まってしまったチケットが進⾏していない 1 • ⼀番古いチケットで、2018年作成のものもあった • OS関係のチケットは、最新OSでは解消しているが、チケットは未対応のまま残り続けた • ⼀番古いチケットで、2018年作成のものもあった 着⼿途中に何らかの理由で⽌まってしまったチケットが進⾏していない 2

    • ⼀番古いチケットで、2018年作成のものもあった • OS関係のチケットは、最新OSでは解消しているが、チケットは未対応のまま残り続けた • ⼀番古いチケットで、2018年作成のものもあった 02 Yappliの開発について - STEP3 改善の説明
  14. 00 セクションタイトルを⼊れます ポイント換算機能 - Yappli CRMポイント→gifteeポイント 4 (ここでポイント換算機能全体のシステム概要図を書く。 このスライドでは主にYappli CRM

    atami-native Audienceサーバーの3つが 登場するシーケンス図を書く) この機能は主にフォーム2が絡んでくるので、この後のスライドでフォーム2 機能についてもシーケンス図をハイライトしつスライドを複数枚つかって解 説する。)
  15. 02 外部システム連携の概要 ⽬的と課題 3 • CRMポイントがgiftee(for business)でも利⽤可能とすることで「コンテン ツ/インセンティブ不⾜」に悩む企業へ価値を提供していく ◦ 課題1)UNITEアプリで従業員のエンゲージメントを⾼めるためにポイント(CRMポイント)

    を発⾏してるが、ポイントの交換先が不⾜してるため上⼿くインセンティブが効いていない ◦ 課題2)Y4Mアプリでユーザー向けに発⾏してるポイントの利⽤範囲を、「⾃社サービス以 外」にも拡充させることで、⾃社ポイント獲得を促し最終的に⾃社サービスの利⽤率を上げ たい
  16. 刷新⽅法 • データマート作成処理をdbtでリプレイス 04 分析⽤データ基盤刷新の⽅向性 「dbt」とは? • データの加⼯処理を管理してくれるツール ◦ SQLによる加⼯処理のGit管理を可能に

    ◦ データカタログの⾃動⽣成 ◦ データのテスト ◦ etc… • 無償CLI版と有償SaaS版がある ◦ 弊社では無償CLI版を採⽤ dbt Labs
  17. 02 外部システム連携の概要 giftee Point Base連携‧画⾯イメージ 2 CRMポイントからgifteeポイントへ交換はユーザー側で実施 以後、gifteeマイページ内(WebView)でeGiftへの交換などが可能 任意のポイント数を入力 (ex.5ptをgifteeポイントへ交換)

    CRMポイントと交換導線を設置 (CRM:10pt giftee:0pt) CRMポイントが減算される (CRM:5pt giftee:5pt) gifteeマイページを表示 ※web (eギフト等へ交換が可能) ログイン 以下から gifteeマイ ページへログインし てください。 ※セッション有効期 間は24hとなりま す。 最終アクセスから 24h以内で あれば本画面はスキップ (セッション切れたら表示) 5 100
  18. 00 セクションタイトルを⼊れます ポイント換算機能 1 • サービスを跨いだトランザクション ◦ Yappli CRMポイントを減算後、減算した分のポイントをgifteeポイント付与APIで実⾏ するため、トランザクションが1つのサービスに閉じない

    ▪ パフォーマンスのため、なるべく換算処理はバックグラウンドでやりたい ▪ しかし、減算処理を⾮同期に⾏うと保有ポイントが不⾜したときにユーザーに フィードバックできない ▪ ポイントは財産に該当するため、特にデータ不整合が許されない