- 認可コードグラントタイプ(3-legged OAuth)の概要
- Indeedパートナーになる
- 認可コードを取得する
- OAuth認証情報を取得する
- 3-leggedアクセストークンを取得する
- 3-leggedアクセストークンを更新する
- Indeed APIを呼び出す
- 雇用主を表すアクセストークンを取得する
- Indeedの雇用主選択画面を表示する
- カスタム雇用主選択画面を表示する
- 雇用主アクセストークンを取得する
- ユーザー情報を取得する
- IDトークン
- userinfo エンドポイント
- ユーザーを複数のURLに動的にリダイレクトする
- ガイドライン
- 認可コードの漏洩を防ぐ
- リダイレクト URI にクエリパラメーターを付加しない
- 関連項目
認可コードグラントタイプ(3-legged OAuth)
Indeedのユーザーアカウントおよび関連付けられた雇用主アカウントに代わって動作することをアプリに認可します。
By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
認可コードグラントタイプ(3-legged OAuth)の概要
認可コードグラントタイプ(3-legged OAuth)を使用して、Indeedのユーザーアカウントおよび関連付けられた雇用主アカウントに代わって動作することをアプリに認可します。
When you become an Indeed partner, Indeed sets up an app for your integration. Sign in to Partner Console to view your app and OAuth credentials (client ID, secret, and authorization code for 3-legged OAuth). Exchange credentials for an access token to authenticate API calls.
次のタスクも実行できます。
- 雇用主を表すアクセストークンを取得する。
- アプリを登録したユーザーアカウントの情報を取得する。
- ユーザーを複数のURLに動的にリダイレクトする。
- 認可コードの漏洩を防ぐ。
Indeedパートナーになる
まだパートナーでない場合は、Indeed パートナーになる をご覧ください。
認可コードを取得する
アプリは、3-legged OAuth認証情報(認可コード)をリクエストする必要があります。
認可コードフローを開始するには、IndeedのOAuth 2.0サーバーへのリクエストURLを作成し、email、offline_access、employer_accessの権限をユーザーに要求します。
ユーザーをその URL にリダイレクトします。Indeed は OAuth 同意画面を表示します。
ユーザーが Allow を選択すると、Indeed は認可コードを redirect_uri エンドポイントに送信し、code、iss、state のレスポンスフィールドを追加します。認可コードは 10 分で失効します。oauth/v2/authorize のレスポンスフィールドをご覧ください。
-
https://secure.indeed.com/oauth/v2/authorizeにある Indeed OAuth 2.0 サーバーへのリクエスト URL を作成します。次のリクエストURLの例では、
email、offline_access、employer_accessの権限をユーザーに要求しています。読みやすさのため、この例のURLには改行とスペースを含めています。
https://secure.indeed.com/oauth/v2/authorize?client_id=c4acac1b35917a14c11947f6564ee28a0758398cd0fdf4deec685c40f14bb8a8&redirect_uri=http%3A%2F%2Fwww.acerecruitersllc.com%2Foauth%2Findeed&response_type=code&scope=email+offline_access+employer_access&state=employer1234oauth/v2/authorizeのクエリパラメーターは次のとおりです。oauth/v2/authorizeのクエリパラメーター クエリパラメーター 必須 説明 client_id✔
クライアントID。
redirect_uri✔
URLエンコードされたリダイレクトURL。認可コードを取得するサイト内のリダイレクトページを指定します。アプリで登録したリダイレクトURLのいずれかと一致している必要があります。
response_type✔
常に
codeです。scope✔
クライアントアプリがリクエストする権限。スコープはURLエンコードしてスペース区切りで指定する必要があります(スペースはプラス記号(
+)に置き換えられます)。この例では、
email、offline_access、employer_accessの権限をユーザーに要求しています。state推奨
CSRF攻撃を防止します。リクエストとコールバックの間で状態を保持するためにアプリが生成する一意の文字列を指定できます。IndeedはこのパラメーターをリダイレクトURIに渡します。
-
ユーザーをリクエストURLにリダイレクトします。
Indeed は、アクセスしたいアカウントを持つユーザーに OAuth 同意画面を表示します。
ユーザーが Allow を選択すると、Indeed は認可コードを
redirect_uriに送信し、code、iss、stateのレスポンスフィールドを追加します。 -
redirect_uriのページからcodeパラメーターを取得します。例:
GET http://www.acerecruitersllc.com/oauth/indeed?code=rXZSMNyYQHQ&state=employer1234&iss=https%3A%2F%2Fsecure.indeed.com
OAuth認証情報を取得する
-
IndeedユーザーアカウントでPartner Consoleにログインします。
-
ダッシュボードで、アプリリストから自社のアプリを選択します。
アプリ詳細ページの認証情報タブに、OAuth認証情報(クライアントIDとクライアントシー クレット)が表示されます。
3-leggedアクセストークンを取得する
アクセストークンの有効期間は1時間です。アクセストークンを更新するには、3-leggedアクセストークンを更新するをご覧ください。
アクセストークンを取得するには、AcceptおよびContent-Typeリクエストヘッダーとリクエストボディパラメーターを指定して、https://apis.indeed.com/oauth/v2/tokensエンドポイントにPOSTリクエストを送信します。
curl -L -X POST 'https://apis.indeed.com/oauth/v2/tokens' \ -H 'Accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=authorization_code' \ -d 'client_id=<client_id>' \ -d 'client_secret=<client_secret>' \ -d 'code=<authorization_code>' \ -d 'code_verifier=<code_verifier>' \ -d 'redirect_uri=http://www.acerecruitersllc.com/oauth/indeed'リクエストヘッダーは次のとおりです。
oauth/v2/tokensのリクエストボディパラメーターは次のとおりです。
| リクエストボディパラメーター | 必須 | 値 |
|---|---|---|
grant_type | ✔ | authorization_code |
client_id | ✔ | クライアントID。 |
client_secret | ✔ | クライアントシークレット。 |
scope | 条件付き | アプリに権限を付与するスコープ。 |
code | ✔ | 認可コードです。 |
code_verifier | PKCE を使用する場合は ✔ | code_challenge を生成する code verifier です。confidential client は code_challenge を使用してください。RFC 7636: Proof Key for Code Exchange by OAuth Public Clients で定義されているとおり、code verifier から OAuth PKCE code challenge を生成します。 |
redirect_uri | ✔ | URLエンコードされたリダイレクトURL。 認可コード取得時に指定したリダイレクトURLと一致している必要があります。 |
{ "access_token": "<access_token>", "convid": "1eis1tplg01fe802", "refresh_token": "<refresh_token>", "scope": "offline_access email", "token_type": "Bearer", "expires_in": 3600}3-leggedアクセストークンを更新する
アクセストークンを更新するには、Accept および Content-Type リクエストヘッダーとリクエストボディパラメーターを指定して、https://apis.indeed.com/oauth/v2/tokens に POST リクエストを送信します。
curl -L -X POST 'https://apis.indeed.com/oauth/v2/tokens' \ -H 'Accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=refresh_token' \ -d 'client_id=<client_id>' \ -d 'client_secret=<client_secret>' \ -d 'refresh_token=<refresh_token>' リクエストヘッダーは次のとおりです。
oauth/v2/tokensのリクエストボディパラメーターは次のとおりです。
| リクエストボディパラメーター | 必須 | 値 |
|---|---|---|
grant_type | ✔ | refresh_token |
client_id | ✔ | クライアントID。 |
client_secret | ✔ | クライアントシークレット。 |
refresh_token | ✔ | リフレッシュトークン。 |
{ "access_token": "<access_token>", "id_token": "<id_token>", "refresh_token": "<refresh_token>", "convid": "1c1a1s8540kkt89p", "scope": "email offline_access", "token_type": "Bearer", "expires_in": 3600}Indeed APIを呼び出す
Indeed GraphQL APIを呼び出すには、以下のヘッダーとGraphQLクエリまたはミューテーションを指定してhttps://apis.indeed.com/graphqlにPOSTリク エストを送信します。
curl -L 'https://apis.indeed.com/graphql' \ -H 'Authorization: Bearer <access_token>' \ -H 'Content-Type: application/json' \ -d '{"query":"query {\n jobSearch(\n location: { radius: 5, radiusUnit: MILES, where: \"Austin\" }\n what: \"Nurse\"\n limit: 5\n ) {\n results {\n job {\n title\n sourceEmployerName\n }\n }\n }\n}","variables":{}}'リクエストヘッダー:
| ヘッダー | 値 | 説明 |
|---|---|---|
|
| Use this header to authenticate with the server and access protected resources. Pass the access token in this header with the For the See Get an access token, Authorization header, and Basic authentication scheme. |
|
| The media type of the resource. See Content-Type header. |
-dパラメーターでGraphQLクエリを指定します。
query { jobSearch(location: { radius: 5, radiusUnit: MILES, where: "Austin" } what: "Nurse" limit: 5) { results { job { title sourceEmployerName } } }}{ "errors": [{ "message": "The client does not have access to the 'job-retrieval-service' service.", "extensions": { "code": "INTERNAL_SERVER_ERROR" } }], "data": null}雇用主を表すアクセストークンを取得する
Some Indeed APIs require an access token that represents an employer or advertiser.
ユーザーには、次のいずれかの画面を表示できます。
どちらの画面でも、ユーザーは自分のアカウントに関連付けられた雇用主の一覧から雇用主を選択します。
その後、その雇用主のアクセストークンを取得 します。
Each access token represents one employer. To switch employers, get a new access token.
Indeedの雇用主選択画面を表示する
-
Indeed の雇用主選択画面を表示する認可リンクを取得するには、
prompt=select_employerとscope=employer_accessクエリパラメーターを指定して、https://secure.indeed.com/oauth/v2/authorizeエンドポイントを呼び出します。この呼び出しには、
prompt=select_employerとscope=employer_accessの両方のクエリパラメーターが含まれます。https://secure.indeed.com/oauth/v2/authorize?client_id=<client_id>&redirect_uri=https%3A%2F%2Fexample.com%2Foauth&response_type=code&state=random&scope=email+offline_access+employer_access&prompt=select_employerこの認可リンクにより、次の画面が表示されます。
Indeedが提供する画面 画面 説明 認証
ユーザーがIndeedからログアウトしている場合に表示されます。
OAuth同意
employer_accessスコープなど、OAuthアプリがリクエストするスコープに対してユーザーが同意を付与できます。Indeed雇用主選択
ユーザーアカウントに関連付けられた雇用主のリストから、ユーザーが雇用主を選択できます。
ユーザーに表示される OAuth 同意画面は、Partner Console で確認できます。
-
ユーザーが雇用主を選択すると、Indeed は雇用主 ID を redirect URI に追加します。
https://example.com/oauth/callback?state=random&employer=6d2f02224e30d401810b1726eb246d8d&code=e_IEr5UlBys&iss=https%3A%2F%2Fsecure.indeed.comURL には、雇用主 ID を保持する
employerパラメーターが含まれます。prompt=select_employerを設定していても、redirect URI にemployerパラメーターが常に含まれるとは限りません。 -
雇用主アクセストークンを取得するに進みます。
カスタム雇用主選択画面を表示する
Indeed では標準の Indeed 雇用主選択画面 を推奨しています。独自の画面を使用する場合は、次のようにします。
-
OAuth同意画面を表示するため、3-leggedアクセストークンを取得します。トークンを取得する際は、
employer_accessとoffline_accessのスコープをリクエストしてください。レスポンスは access token、ID token、refresh token を返します。
-
現在のユーザーの雇用主を一覧表示するには、JSON Web Tokens Debuggerを使用してIDトークンをデコードします。
-
ユーザーが雇用主を選択できるカスタム雇用主選択画面を作成します。
-
雇用主アクセストークンを取得するに進みます。
雇用主アクセストークンを取得する
雇用主選択画面でユーザーが選択した雇用主を表すアクセストークンを取得します。
雇用主を表すアクセストークンを取得するには、Accept および Content-Type リクエストヘッダーとリクエストボディパラメーターを指定して、https://apis.indeed.com/oauth/v2/tokens エンドポイントに POST リクエストを送信します。
curl -L -X POST 'https://apis.indeed.com/oauth/v2/tokens' \ -H 'Accept: application/json' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=authorization_code' \ -d 'client_id=<client_id>' \ -d 'client_secret=<client_secret>' \ -d 'redirect_uri=http://localhost' \ -d 'code=<authorization_code>' \ -d 'employer=<employer_id>'リクエストヘッダーは次のとおりです。
oauth/v2/tokensのリクエストボディパラメーターは次のとおりです。
| リクエストボディパラメーター | 必須 | 値 |
|---|---|---|
grant_type | ✔ |
または:
refresh token を使用して access token を取得する場合、OAuth 同意画面は不要です。 |
client_id | ✔ | クライアントID。 |
client_secret | ✔ | クライアントシークレット。 |
code | 認可コードを使用 してアクセストークンを取得する場合は✔ | 認可コード。 |
redirect_uri | ✔ | URLエンコードされたリダイレクトURL。 |
refresh_token | リフレッシュトークンを使用してアクセストークンを取得する場合は✔ | リフレッシュトークン。 |
employer | ✔ | 雇用主のID。ユーザーが選択した雇用主のIDを指定します。 |
レスポンスには、雇用主を表す access token が含まれます。
{ "access_token": "<access_token>", "scope": "employer_access", "token_type": "Bearer", "expires_in": 3600}アプリを登録したユーザーに関連付けられていない雇用主の access token をリクエストすると、次のエラーが返されます。
{ "error_description": "Invalid request", "error": "invalid_request"}この access token は、同意したユーザーに代わって、この雇用主に対してのみ API 呼び出しに使用してください。
refresh token を access token に交換するときにも、employer パラメーターを渡すことができます。
ユーザーが雇用主を選択しない場合、またはユーザーアカウントに関連付けられた雇用主がない場合、redirect URI には employer パラメーターが含まれません。
ユーザー情報を取得する
アプリを登録したユーザーアカウントの情報を取得するには、次のいずれかを使用します。
IDトークン
IDトークンは、Base64エンコードされたJSON Web Token(JWT)で、アクセストークンを取得すると自動的に取得できます。このトークンは、ユーザーが認証済みであることを証明します。
Indeed APIはアクセストークンを読み取りますが、サードパーティアプリはユーザーの身元を検証するためにIDトークンを読み取ります。
IDトークンには、現在のユーザーに関する情報が含まれます。id_tokenをご覧ください。
JSON Web Tokenは署名されているため、公開鍵を使ってトークンが有効であることを検証してください。
https://secure.indeed.com/.well-known/keysIDトークンについて詳しくは、OpenID Connect Core 1.0 incorporating errata set 1仕様のID Tokenをご覧ください。
-
IDトークンに
emailとemail_verifiedフィールドを含めるため、アプリはemailスコープを取得する必要があります。 -
アクセストークンを取得するには、
AcceptおよびContent-Typeリクエストヘッダーとリクエストボディパラメーターを指定して、https://apis.indeed.com/oauth/v2/tokensエンドポイントにPOSTリクエストを送信します。curl -L -X POST 'https://apis.indeed.com/oauth/v2/tokens' \-H 'Accept: application/json' \-H 'Content-Type: application/x-www-form-urlencoded' \-d 'grant_type=authorization_code' \-d 'client_id=<client_id>' \-d 'client_secret=<client_secret>' \-d 'redirect_uri=http://localhost' \-d 'code=<authorization_code>'リクエストヘッダーは次のとおりです。
oauth/v2/tokensのリクエストボディパラメーターは次のとおりです。oauth/v2/tokensのリクエストボディパラメーター リクエストボディパラメーター 必須 値 grant_type✔ authorization_codeまたは:
refresh_tokenリフレッシュトークンを使用してアクセストークンを取得する場合、OAuth同意画面は不要です。
client_id✔ クライアントID。
client_secret✔ クライアントシークレット。
code認可コードを使用してアクセストークンを取得する場合は✔ 認可コード。 redirect_uri✔ URLエンコードされたリダイレクトURL。 refresh_tokenリフレッシュトークンを使用してアクセストークンを取得する場合は✔ リフレッシュトークン。 employer✔ 雇用主ID。ユーザーが選択した雇用主のIDを指定します。 JSONレスポンスには、
id_tokenフィールドが含まれます。{"access_token": "<access_token>","convid": "1erq23om7t5bu800","scope": "email employer_access","id_token": "<id_token>","token_type": "Bearer","expires_in": 3600} -
IDトークンの値をデコードするには、JSON Web Tokens Debuggerにコピーします。
レスポンスには、ユーザーのアカウントIDである
subフィールドが含まれます。{"sub": "d2d1962c0664d970"}レスポンスには、
emailとemail_verifiedフィールドが含まれます。{"aud": "a0c3b1092225d3e99f85d7aa3fe1e6001f9a0bb798717cbc2008e58fbda3ef16","sub": "d2d1962c0664d970","employers": [{"id": "13ef9940a7c1f0500a7e411e74178c4e","name": "Dharma Initiative"}, {"id": "6d2f02224e30d401810b1726eb246d8d","name": "Umbrella Corporation"}],"email_verified": true,"iss": "https://secure.indeed.com","exp": 1610417960,"iat": 1610414360,"email": "somebody@indeed.com"}