NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

Backlog用のOWINOAuthミドルウェア

こんにちは、上坂です。

皆さんは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で利用可能です。

NuGet Owin.Security.Providers

使い方は超簡単です。

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
{

    ClientId = "[ClientId]",
ClientSecret = "[ClientSecret]",
    ContractName = "[ContractName]",
    CallbackPath = new PathString("/callbackPath"),  // ex.new PathString("/OauthTokenRequest")

    Provider = new BacklogAuthenticationProvider
    {
        OnAuthenticated = async context => await System.Threading.Tasks.Task.Run*1;

        })
    }
};
 

 

Backlogディベロッパーサイトはこちらです。

実行した時の動作を確認します。右上のログインボタンをクリックします。

f:id:nextscape_blog:20210909222044p:plain

右側にある「Backlog」ボタンをクリックします。

f:id:nextscape_blog:20210909222106p:plain

未ログインの場合はBacklogのログイン画面が出てきますので、ID/PWを入力して認証します。

f:id:nextscape_blog:20210909222131p:plain

アプリケーションによる認証を許可します。

f:id:nextscape_blog:20210909222149p:plain

認証に成功すると、画面が戻ってきます。この画面が出れば成功です。

f:id:nextscape_blog:20210909222207p:plain

この画面では外部認証の結果をもらって自分のアプリケーション内でその結果を紐付けるために登録を促しています。
つまり、Backlog認証は成功している、ということです。

お試しください!

*1:) => 
        {

            System.Diagnostics.Debug.WriteLine(String.Format("Refresh Token: {0}", context.RefreshToken