RubyでOutlookAPIのOAuth2認証
はじめに
OutlookAPIを利用する機会があったので、今回はRubyでOAuth2認証をする方法について書く。
ドキュメントはこちら
アプリの登録
まずはこちらでアプリケーションの登録をする。
Sign in to your Microsoft account
認証コードの取得
認証コードを取得するメソッドは下記のようになる。
ClientId
とClientSecret
はアプリを登録すると取得できるのでそちらを利用する。
MICROSOFT_OAUTH_URL = 'https://login.microsoftonline.com' CLIENT_ID = 'your-client_id' CLIENT_SECRET = 'your-client_secret' REDIRECT_URI = 'https://your-redirect_url' def get_oauth_url "#{MICROSOFT_AUTH_URL}/common/oauth2/v2.0/authorize?client_id=#{CLIENT_ID}&response_type=code&redirect_uri=#{URI.encode(REDIRECT_URI)}&response_mode=query&scope="User.Read"&prompt=consent" end
このURLに飛ぶと、認証の画面が表示され許可をすると指定したリダイレクトURLに戻ってくる。
そして、次のフローで利用するcode
パラメータを取得できる。
http://localhost/myapp/?code= AwABAAAA...cZZ6IgAA&session_state=7B29111D-C220-4263-99AB-6F6E135D75EF&state=D79E5777-702E-4260-9A62-37F75FF22CC
アクセストークンとリフレッシュトークンを取得する
上の手順で取得したcode
パラメータの値を使い、API利用のためのトークンを取得する。
下記のリクエストを送る。
POST https://login.microsoftonline.com/common/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=AwABAAAA...cZZ6IgAA&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F&client_id=<CLIENT ID>&client_secret=<CLIENT SECRET>
すると、下記のようなレスポンスを受け取れる。
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 { "token_type":"Bearer", "expires_in":"3600", "access_token":"eyJ0eXAi...b66LoPVA", "refresh_token":"eyJ0eXAi...b66LoPVB", "scope":"Mail.Read", }
access_token
が取得できればあとは、各エンドポイントを叩けるので自由にデータを取得できる。
Ruby要素そんなになかったです。