SalesforceがGoInstant買収してどうのこうのって話らしいので、GoInstant試してます。

 

GoInstantでユーザ認証するには外部の認証プロバイダ(facebook, salesforce, github, google, twitter)

を使ってOpenID Connectやら何やらで認証するか

自前の認証プロバイダ(と言っても普通のログイン機能を有するアプリ)で

JWTをGoInstantに投げ入れて認証します。

 

前者の場合はそれぞれのアプリケーション設定して

ClientIDとかSecretを設定してJS叩くだけで超簡単に実装できます(リファレンス)。

後者のJWT生成もGoInstantのライブラリ(Ruby、Java、PHP、node.js)があって

ライブラリのない言語の場合もJWT生成のライブラリを使えば、こちらも楽勝。

 

んで、PythonでチャレンジしようとJWT生成のライブラリをインストールしてみたけど

うまくいかなかったのでJWTの勉強がてら、自前で生成してみた。

 

 

これでJWT生成はOK。

生成の流れとしては、ヘッダ(暗号化方式を記述)とクレーム(トークンのデータ)のそれぞれのJSON文字列を

urlsafeなbase64エンコードして、それをカンマでくっつけたものを

アプリケーション毎のキーでハッシュ作ってurlsafeなbase64エンコードしてSignatureを作る。

最後にヘッダ、クレーム、Signatureをカンマで連結(それぞれbase64エンコード)して終わり。

 

実際の実装はdjangoなりflaskなりでログイン認証した後に、認証ユーザに対する適切なJWTを作って

JSの変数にバインドして、GoInstantのJSでユーザプレゼンスを得るって感じになる。

 

Apex(force.com)だとこんな感じ。

 

Salesforceの場合、ログイン認証は既にWebアプリとして持っているため

ログインユーザに見せるVFページでJWTを発行すれば、GoInstant内でもユーザプレゼンスが確保されます。