第4章 GitHub での認証
GitHub または GitHub Enterprise でユーザーを認証する場合は、以下を行います。
4.1. GitHub での認証の有効化 リンクのコピーリンクがクリップボードにコピーされました!
GitHub を使用してユーザーを認証するには、Red Hat Developer Hub で GitHub 認証プロバイダーを有効にします。
前提条件
- カスタムの Developer Hub アプリケーション設定を追加 した。また、その設定を変更するための十分な権限を持っている。
- GitHub アプリケーション を作成および管理するのに十分な権限が GitHub にある。
手順
Developer Hub が GitHub で認証できるようにするには、GitHub アプリケーションを作成します。きめ細かな権限を使用し、アプリケーションがアクセスできるリポジトリーをより細かく制御して、有効期間の短いトークンを使用するには、OAuth アプリケーションではなく GitHub アプリケーションを選択します。
次の設定で GitHub アプリケーションを登録します。
- GitHub アプリケーション名: <Red Hat Developer Hub>-<GUID> など、GitHub アプリケーションを識別する一意の名前を入力します。
-
ホームページ URL: Developer Hub の URL:
https://<my_developer_hub_url> -
認可コールバック URL: Developer Hub 認証バックエンド URL:
https://<my_developer_hub_url>/api/auth/github/handler/frame -
Webhook URL: Developer Hub の URL:
https://<my_developer_hub_url> - Webhook シークレット: 強力なシークレットを提供します。
リポジトリー権限:
次の項目に対する
Read-onlyアクセスを有効にします。- 管理
- コミットステータス
- 内容
- Dependabot アラート
- デプロイメント
- プルリクエスト
Webhook
ヒントGitHub API を使用して変更を加える予定の場合は、
Read-onlyではなく、Read and write権限が有効になっていることを確認してください。
- 必要に応じて他の権限を切り替えます。
組織の権限:
-
メンバー への
Read-onlyアクセスを有効にします。
-
メンバー への
-
Where can this GitHub App be installed? で、
Only on this accountを選択します。
-
General
Clients secrets セクションで、Generate a new client secret をクリックします。 -
General
Private keys セクションで、Generate a private key をクリックします。 - Install App タブで、GitHub アプリケーションをインストールするアカウントを選択します。
次のステップのために以下の値を保存します。
- アプリケーション ID
- クライアント ID
- クライアントシークレット
- 秘密鍵
- Webhook シークレット
GitHub 認証情報を Developer Hub に追加するには、以下のキーと値のペアを Developer Hub シークレット に追加します。
AUTH_GITHUB_APP_ID- 保存した アプリケーション ID を入力します。
AUTH_GITHUB_CLIENT_ID- 保存した クライアント ID を入力します。
GITHUB_ORGANIZATION- '<your_github_organization_name>' などの GitHub 組織名を入力します。
GITHUB_ORG_URL-
$GITHUB_HOST_DOMAIN/$GITHUB_ORGANIZATIONを入力します。 GITHUB_CLIENT_SECRET- 保存した クライアントシークレット を入力します。
GITHUB_PRIVATE_KEY_FILE- 保存した 秘密鍵 を入力します。
GITHUB_WEBHOOK_URL-
Developer Hub の URL を入力します (
https://<my_developer_hub_url>)。 GITHUB_WEBHOOK_SECRET- 保存した Webhook シークレット を入力します。
.GitHub 認証プロバイダーを設定し、Developer Hub のカスタム設定で GitHub API とのインテグレーションを有効にするには、Developer Hub のカスタム config map (
my-rhdh-app-configなど) を編集し、app-config.yamlファイルの内容に次の行を追加します。GitHub での認証を有効にするための必須フィールドを含む
app-config.yamlファイルのフラグメントauth: environment: production1 providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID}2 clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: github3 - 1
- 環境を
productionとしてマークし、Developer Hub のログインページでゲストログインオプションを無効にします。 - 2
- Developer Hub のシークレットに設定されている GitHub 認証情報を適用します。
- 3
- GitHub プロバイダーを Developer Hub サインインプロバイダーとして有効にします。
オプション: 次のオプションフィールドを追加することを検討してください。
callbackUrlOAuth フローを開始するときに GitHub が使用するコールバック URL (例: <your_intermediate_service_url/handler>)。多くの Developer Hub インスタンスに対して 1 つの OAuth アプリケーションを使用する場合など、Developer Hub が直接のレシーバーではない場合に定義します。
オプションの
enterpriseInstanceUrlフィールドを含むapp-config.yamlファイルのフラグメントauth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>
sessionDurationユーザーセッションの有効期間。期間を
msライブラリー形式 ('24h'、'2 days' など)、ISO 期間形式、またはコード内で使用される "human duration" 形式で入力します。オプションの
sessionDurationフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: github: production: sessionDuration: { hours: 24 }signInresolvers-
認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバー
usernameMatchingUserEntityNameをオーバーライドするには、リゾルバーのリストを入力します。
認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolverサインインリゾルバー名を入力します。利用可能なリゾルバーは次のとおりです。
-
usernameMatchingUserEntityName -
preferredUsernameMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログのユーザープロビジョニング要件を回避するようにサインインリゾルバーを設定します。
警告Developer Hub の機能を調べるには
dangerouslyAllowSignInWithoutUserInCatalogを使用しますが、実稼働環境では使用しないでください。ソフトウェアカタログに存在しないユーザーのサインインを許可するオプションのフィールドを含む
app-config.yamlファイルのフラグメントauth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} signIn: resolvers: - resolver: usernameMatchingUserEntityName dangerouslyAllowSignInWithoutUserInCatalog: true integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: github
別の認証プロバイダーとの GitHub インテグレーションを有効にするには、次の設定を完了します。
-
GitHub プロバイダーを既存の
authセクションに追加します。 -
認証プロバイダーの設定から
signInPageセクションを保持します。
GitHub インテグレーションを有効にし、別の認証プロバイダーを使用するための必須フィールドを含む app-config.yaml ファイルのフラグメント
auth:
environment: production
providers:
github:
production:
clientId: ${AUTH_GITHUB_CLIENT_ID}
clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}
<your_other_authentication_providers_configuration>
integrations:
github:
- host: ${GITHUB_HOST_DOMAIN}
apps:
- appId: ${AUTH_GITHUB_APP_ID}
clientId: ${AUTH_GITHUB_CLIENT_ID}
clientSecret: ${GITHUB_CLIENT_SECRET}
webhookUrl: ${GITHUB_WEBHOOK_URL}
webhookSecret: ${GITHUB_WEBHOOK_SECRET}
privateKey: |
${GITHUB_PRIVATE_KEY_FILE}
signInPage: <your_main_authentication_provider>
検証
- Developer Hub のログインページに移動します。
- Developer Hub のサインインページには Sign in using GitHub と表示され、ゲストユーザーのサインインは無効になっています。
- GitHub でログインします。