#はじめに
以下の3つについて説明することでMilkcocoaの認証について説明します。
- 認証済みクライアント以外を接続不可にする機能
- API Key認証
- トークン認証
「認証済みクライアント以外を接続不可にする」とは?
![スクリーンショット 2015-10-29 1.20.59.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F20848%2F43a66e4d-68b2-28e9-b458-25861f8b6a91.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=dd08f14980e03c19bf1b414d143ae63e)
これをONにすると、「認証」を行っていないクライアントのすべてのAPIアクセスを拒否します。同時接続数にも加算されません。「認証」には以下の2つの方法があります。
- API Key認証
- トークン認証
###API Key認証とは
![スクリーンショット 2015-10-29 1.26.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F20848%2F0d521ca4-10cc-df41-464c-cf41a9cfa1e7.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=716fe8a7cacc68728ec447122daf6d37)
API KeyとSecretのペアを生成して、それを使って認証します。JavaScriptのソースコードは以下です。
var milkcocoa = MilkCocoa.connectWithApiKey('{appid}.mlkcca.com', 'API_Key', 'API_Secret');
###トークン認証とは
シークレットキーを使ってJSON-Web-Tokenを生成し、それを使って認証します。
![スクリーンショット 2015-11-24 19.33.26.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F20848%2Fdd57def8-6320-79dc-dffb-2476eaf0237e.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=42bbaef275b4e8d23f253ab5870c3bb6)
例えば、Facebook認証を実装し、上のシークレットトークンを使い、JSON-Web-Tokenを生成します。
実装サンプル:https://github.com/milk-cocoa/auth/
JWT生成をしているコードの場所:https://github.com/milk-cocoa/auth/blob/master/server/token.js
var jwt = require('jsonwebtoken');
var token = jwt.sign({
sub :'user id', //<-facebook認証で得たユーザIDを入れる
iss : 'foo.com', //<-自分のホスト
aud : 'mlkcca.com'
}, "{Secret Key}", {expiresIn : 30 * 60});
そのトークンをクライアント側に返し、authWithTokenメソッドを使いMilkcocoaに認証します。
MilkCocoa.authWithToken(token, function(user) {console.log("auth", user)});
//結果:"auth" {sub:'user id', ...}
これによりuserメソッドで、ユーザ情報が取得できるようになります。
MilkCocoa.user(function(user) {console.log("user", user)});
//結果:"user" {sub:'user id', ...}