Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ユーザはログイン時にアクセスを許可するリポジトリを選択できる #18

Open
1 task
kazdevl opened this issue May 10, 2021 · 3 comments

Comments

@kazdevl
Copy link
Contributor

kazdevl commented May 10, 2021

  • GitHub App 方式でのログインの実装
@kazuki-komori
Copy link
Contributor

解決策

  1. アプリをインストール
    https://github.com/apps/epic-manager-dev

  2. アクセス可能なリポジトリを選択

image

  1. web アプリでログインして、使用する

@kazuki-komori
Copy link
Contributor

kazuki-komori commented May 14, 2021

octkit でリポジトリをセットする

https://octokit.github.io/rest.js/v18#apps-create-installation-access-token

上記を使用するには installation_id を取得する必要がある

installation_id を取得する方法

  1. アプリのリスト一覧のレンスポンス内に含まれる?
    https://octokit.github.io/rest.js/v18#apps-list-installations
    => JWT が必要

  2. webhook から取得できるっぽい??
    https://github.saobby.my.eu.orgmunity/t/how-to-get-github-app-installation-id-for-a-user/127276
    ↑何故か見つけられない

image

@chatbox-inc chatbox-inc deleted a comment from kazuki-komori May 28, 2021
@shiyuu33
Copy link
Contributor

shiyuu33 commented May 28, 2021

Github App ログイン実装に関する問題点

実装する段階で色々な懸念点が出てきたので、追記+整理していきます。
Web アプリケーションフローを利用して、ログインユーザを特定することを想定。連携確認のため、自身がオーナーであるGithub Application を作成
https://docs.github.com/ja/developers/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps

Github Applicationの作成・設定

  1. https://github.com/settings/apps からアプリ作成
  2. callback URL の チェックボックスにチェックを入れる。この設定をすることでアプリケーションをinstall時にユーザーの認可が完了し、callback URL のクエリに installation_id と access token を交換するための code が付与される。
    https://docs.github.com/ja/developers/apps/managing-github-apps/installing-github-apps#authorizing-users-during-installation
    スクリーンショット 2021-05-28 22 21 21

Github Application ログイン処理

  1. aタグなどから https://github.com/apps/{アプリ名}/installations/new にアクセス。これでZennのようなGithub連携のフローは実現できる。 https://zenn.dev/dashboard/deploys
  2. 連携完了後、 callback URL のクエリある code と、アプリケーション作成時し取得できる client_id, client_secret をパラメータに含め、https://github.com/login/oauth/access_token にPOST形成で送る
  3. 返ってきた access token と installation_id を用いて、対象のGithubリポジトリとオーナーを取得し、Github APIを通じて操作する

問題点

Github Application ログイン処理 における2.の処理の際、Web アプリケーションフローでは、POSTしてaccess_tokenを取得するのに必要なCORSヘッダーをサポートしてない。 isaacs/github#330

また解決策として https://cors-anywhere.herokuapp.com/https://github.com/login/oauth/access_token を使用すれば回避できるものの、悪用が多く、herokuからサーバー停止を要求されたっぽいです。 https://github.com/Rob--W/cors-anywhere/issues/301

改善策?

https://docs.github.com/en/rest/reference/apps#get-an-app
↑ API v3(エンドポイントがapi.github.comのやつ)ベースでログイン認証考える

ログインフローについてもう一度相談が必要

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants