JWT認証を用いたNetSuiteとデジタル署名サービス (DSS) の連携 （フロー図およびソースコード再利用可）

**リビングの照明のスイッチをONにするように、NetSuiteとのセキュアなサービス連携を「パチッ」と（もしくはリモコンで「ポチッ」と）実現できるなら、すぐにでも試して見たくなりませんか？**

NetSuiteと安全なデジタルサービスを連携するための最小限のプロダクト（MVP）を作成することは、きわめて複雑なわけではありません。Oracle NetSuiteのヘルプセンターやIETF（Internet Engineering Task Force）などの確かな情報源をもとに、堅牢かつ広く採用されている標準規格であるJSON Web Token（JWT）認証を活用することで、比較的短期間で信頼性の高い安全な連携を確立することが可能です。

本稿では、JWT認証を使って、独立系ソフトウェアベンダー（ISV）やその他のサービスプロバイダが、シンプルなビジネスシナリオに基づき、安全にNetSuiteとの統合を実現できることをご紹介します。この内容は、ISVがNetSuite のSDNプログラム（SuiteCloud Developer Network)へ参画をしなくとも試すことができます。本稿をNetSuiteとのセキュアな連携トライアルのご参考として頂くとともに、シングルサインオン（SSO）による連携や、SDNプログラムの活用など、将来的な選択肢の検討材料にして頂けますと幸いです。
<br>

※SDNとは、NetSuiteプラットフォーム上で、ISVが機能拡張アプリケーション（SuiteApp）を提供するプログラムです。SuiteApp.comで利用可能な、デジタル署名サービス（DSS）の例は [こちら](https://www.suiteapp.com/search?keywords=esignature) です。[前回の記事](https://qiita.com/fujitak/items/28825e2fda2b11fa5586) は、ISVのSDNプログラム参加を前提にしておりましたが、本稿はSDN無しでもトライアルができる内容となっております。
<br>

**JWT認証を用いたNetSuiteとデジタル署名サービス (DSS) の連携**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3431564/b1b2324d-1adc-4e41-833b-b6a40b5809c3.png)
[※「JWT Authentication for NetSuite-DSS Integration.zip（フロー図とソースコード）」（© 2025 Takusuke Fujii）は、CC BY 4.0（原作者名の表記が必要）で自由に共有・改変・配布可能ですが、無保証につき著作者は一切責任を負いません。](https://drive.google.com/file/d/1l0gnH3WXyxSYwBNwxvW_XCB-bJpNmL2i/view?usp=sharing)
<br>

**JWT認証とは何か**
JWT（JSON Web Token）は、安全なデジタルパスポートのようなものです。
•	NetSuiteユーザー情報やレコードの情報を含めることが可能
•	秘密鍵によるデジタル署名が施され、改ざんを防止
•	短時間で有効期限が切れ、自動的に無効化
•	セッション情報を保存しなくても、署名を検証するだけでトークンの正当性が確認できる
<br>

**デジタル署名サービス (DSS)を例にした、NetSuiteと外部サービスの連携フローの例**

**初期段階（ステップ 1～2）**
1.　NetSuite側
•	ユーザがレコード画面で「デジタル署名リクエストを送信」ボタンをクリック
•	SuiteScriptが必要な情報を取得
•	NetSuiteが秘密鍵を用いて署名されたセキュアなJWTトークンを作成

2.　DSSへの接続:
•	生成されたJWTトークンが安全なURLを介してDSSに渡される
•	DSSは共有の秘密鍵を使ってJWTトークンの署名を検証
•	検証が通れば、DSS側ではユーザと対象のNetSuiteレコード（マスタまたはトランザクション）を正確に把握できる
<br>

**DSSでの処理（ステップ 3～4）**
3.　DSS側:
•	ユーザが手動で文書をアップロードし、署名ワークフローを設定
•	ユーザが「送信」をクリックし確定
•	DSSが署名リンクのある安全なメールを関係者に送付

4.　署名者:
•	受信者はメール内の安全なリンクを受け取る
•	リンクを開き、文書を確認・署名
<br>

**完了段階（ステップ 5～6）**
5.　DSS側:
•	すべての署名が完了
•	DSSは署名済み文書を含む新しいJWTトークンを作成
•	このトークンは、DSSがNetSuiteに安全に文書を送付するための認証として機能

6.　再びNetSuite側:
•	NetSuiteはDSSから受け取ったJWTトークンを検証
•	署名済み文書安全に受け取り、同一のNetSuiteレコード（最初の段階で指定されたレコード）に添付する
<br>

**JWT認証アプローチとDSSでの手動文書アップロードによるメリット**
• 安全性: JWTは最新の暗号規格を使用しており、極めて高い安全性を提供します。
• SDNの加入不要: SuiteCloud Developer Networkに参加しなくても連携の実現が可能です。
• 将来性: 従来型の方法とは異なり、JWTは広く採用されており、今後もサポートが継続される見込みが高いです。

• シンプルなユーザ体験: セキュリティは裏側で動き、ユーザはNetSuite画面上でボタン等をワンクリックするだけで、DSSを起動できます。
• 単純なパスワードより優れた保護: JWTはユーザ名/パスワードのみの認証よりも強力です。

• 簡素化された連携設計: NetSuiteのレコード情報（IDやタイプなど）のみを送信するので、データフローの煩雑さを軽減できます。文書はDSSで手動アップロードするため、データの流れをよりシンプルに保つことができます。
• ドキュメント管理が明確: 署名完了後に新規添付ファイルをNetSuiteに作成するフローで、バージョン競合を防ぎ、既存ファイルを上書きしてしまうリスクも回避できます。署名済み文書の明確な監査証跡を残すことが可能です。
<br>

このように、JWTをベースとした認証とDSSでの手動文書アップロードの組み合わせは、最小限のプロダクト（MVP）としての連携の確立において、安全性、シンプルさ、実装の容易さを、バランスよく確保するアプローチとなります。
<br>

**参考文献**
[NetSuite Applications Suite - Create a JWT Token Using a Secure String](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/article_0111025224.html?utm_source=chatgpt.com) 
[NetSuite Applications Suite - SAML Single Sign-on](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_N3825119.html?utm_source=chatgpt.com) 
[Why Join SDN? - Join the SuiteCloud Developer Network | NetSuite](https://www.netsuite.com/portal/developers/sdn.shtml?utm_source=chatgpt.com) 
[Internet Engineering Task Force (IETF) - RFC 7519 - JSON Web Token (JWT)](https://datatracker.ietf.org/doc/html/rfc7519) 
[OASIS Open - Digital Signature Service Overview](https://docs.oasis-open.org/dss/v1.0/oasis-dss-1.0-overview-cd-r1.html) 
<br>

© 2025 Takusuke Fujii
本記事は CC BY 4.0（原作者名の表記が必要）で自由に共有・改変・配布できますが、無保証につき著作者は一切責任を負いません。