開発Tips&ログ

iOS/Androidアプリ、WEB開発、インフラなどソフトウェア開発についての技術ブログ。

RubyでOutlookAPIのOAuth2認証

はじめに

OutlookAPIを利用する機会があったので、今回はRubyでOAuth2認証をする方法について書く。

ドキュメントはこちら

docs.microsoft.com

アプリの登録

まずはこちらでアプリケーションの登録をする。

Sign in to your Microsoft account

認証コードの取得

認証コードを取得するメソッドは下記のようになる。

ClientIdClientSecretはアプリを登録すると取得できるのでそちらを利用する。

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要素そんなになかったです。