こんにちは、上坂です。
皆さんはBacklogというウェブサービスをご存知でしょうか。
ネクストスケープではチケット管理にBacklogというウェブサービスを利用しています。
BacklogにはSubversionとGitのリポジトリもあってシステム開発にも親和性が高いのですが、今日はこのBacklogのOAuth認証のAPIを利用する話です。
私は今、エバンジェリスト活動だけでなく社内で利用するシステムを開発するチームにも所属しているのですが、そのチームでAzure上に置いたシステムの認証をどうしようか、という話なりました。
当然AzureADを使った認証を真っ先に検討したのですが、要件としてオンプレのADとディレクトリ同期が必要でした。
環境をそこまで整えるのは少し時間が必要ですが、リリースは待ってくれません。(このプロジェクトは1スプリント2週間、Scrumで回しています)
そこで、環境が整うまではBacklogのOAuthを使って認証させることになりました。
BacklogのOAuthの認証を利用するにあたり、OWINの仕組みを利用したいと思いましたが(ASP.NET 4.5)、Backlog用のOWINミドルウェアが探しても見つからなかったので、作っちゃいました。
といってもフルスクラッチではなく、既に各種OWIN用のOAuthプロバイダーを作成して公開しているプロジェクトに相乗りしました。
こちらです。
RockstarLabs/OwinOAuthProviders
既にリポジトリに取り込んでいただいていますので、Nugetで利用可能です。
使い方は超簡単です。
App_Startフォルダ内のStartup.Auth.csを開いて、次のように修正して下さい。
(先頭にusing TestOwin.Security.Providers.Models;が必要です。)
ClientId:Backlogディベロッパーサイトで取得したClientId
ClientSecret:Backlogディベロッパーサイトで取得したClientSecret
ContractName:Backlogと契約した時のサブドメイン名。URL見ればわかる。ex.https://mydomain.backlog.jp の mydomainのこと。
CallbackPath:Backlogディベロッパーサイトにてアプリ登録時に指定したCallbackPath
var options = new BacklogAuthenticationOptions
{
ContractName = "[ContractName]",
CallbackPath = new PathString("/callbackPath"), // ex.new PathString("/OauthTokenRequest")
Provider = new BacklogAuthenticationProvider
{
OnAuthenticated = async context => await System.Threading.Tasks.Task.Run*1;
}
};
Backlogディベロッパーサイトはこちらです。
実行した時の動作を確認します。右上のログインボタンをクリックします。
右側にある「Backlog」ボタンをクリックします。
未ログインの場合はBacklogのログイン画面が出てきますので、ID/PWを入力して認証します。
アプリケーションによる認証を許可します。
認証に成功すると、画面が戻ってきます。この画面が出れば成功です。
この画面では外部認証の結果をもらって自分のアプリケーション内でその結果を紐付けるために登録を促しています。
つまり、Backlog認証は成功している、ということです。
お試しください!
*1:) =>
{
System.Diagnostics.Debug.WriteLine(String.Format("Refresh Token: {0}", context.RefreshToken