- 認可コードグラントタイプ(3-legged OAuth)の概要
- Indeed パートナーになる
- 認可コードを取得する
- OAuth 認証情報を取得する
- 3-legged アクセストークンを取得する
- 3-legged アクセストークンを更新する
- Indeed API を呼び出す
- 雇用主アクセストークンを取得する
- Indeed 雇用主選択画面を表示する
- カスタム雇用主選択画面を表示する
- 雇用主アクセストークンを取得する
- ユーザー情報を取得する
- ID トークン
- userinfo エンドポイント
- ユーザーを複数の URL に動的にリダイレクトする
- ガイドライン
- 認可コードの漏えいを防ぐ
- リダイレクト URI にクエリパラメーターを追加しない
- 関連項目
認可コードグラントタイプ(3-legged OAuth)
Indeed ユーザーアカウントおよび関連付けられた雇用主アカウントに代わって動作するようにアプリを認可します。
本 API および本ドキュメントを利用し、連携を構築することにより、Additional API Terms and Guidelines に同意したものとみなされます。
認可コードグラントタイプ(3-legged OAuth)の概要
認可コードグラントタイプ(3-legged OAuth)を使用すると、Indeed ユーザーアカウントおよび関連付けられた雇用主アカウントに代わってアプリを動作させることができます。
Indeed パートナーになると、Indeed が連携用のアプリを作成します。Partner Console にサインインして、アプリと OAuth 認証情報(クライアント ID、クライアントシークレット、および 3-legged OAuth の場合は認可コード)を確認します。認証情報をアクセストークンと交換し、API 呼び出しを認証します。
次のこともできます。
- 雇用主アクセストークンを取得する。
- アプリを登録したユーザーアカウントに関する情報を取得する。
- ユーザーを複数の 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権限をユーザーにリクエストしています。この例には、読みやすさのために改行とスペースが含まれています。
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 エンコードし、スペース区切りで指定します。URL エンコードすると、スペースはプラス記号(
+)に置き換えられます。この例では、
email、offline_access、employer_access権限をユーザーにリクエストしています。state推奨
CSRF 攻撃を防ぎます。リクエストとコールバックの間で状態を維持するために、アプリが生成する任意の一意な文字列を使用します。Indeed はこの値をリダイレクト URI に返します。
-
ユーザーをリクエスト URL にリダイレクトします。
Indeed には、アクセスする対象のアカウントを所有するユーザーに OAuth の同意画面が表示されます。
ユーザーが Allow を選択すると、Indeed は認可コードを
redirect_uriに送信し、codeと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 にサインインします。
-
Dashboard の Apps リストで、アプリを選択します。
アプリの詳細ページにある Credentials タブに、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_verifier は code_challenge を生成するために使用します。機密クライアントでは 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":{}}'リクエストヘッ ダー:
| ヘッダー | 値 | 説明 |
|---|---|---|
|
| このヘッダーを使用してサーバーで認証し、保護されたリソースにアクセスします。 このヘッダーで
アクセストークンを取得する、Authorization header、およびBasic authentication schemeをご覧ください。 |
|
| リソースのメディアタイプです。 Content-Type ヘッダーをご覧ください。 |
-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}雇用主アクセストークンを取得する
一部の Indeed API では、雇用主または広告主を表すアクセストークンが必要です。以下の手順では、必要に応じて employer を advertiser に置き換えてください。
次のいずれかの画面をユーザーに表示します。
どちらの画面でも、ユーザーは自分のアカウントに関連付けられた雇用主の中から 1 つを選択します。
その後、その雇用主のアクセストークンを取得します。
各アクセストークンは 1 つの雇用主を表します。雇用主を切り替えるには、新しいアクセストークンを取得します。
Indeed 雇用主選択画面を表示する
-
Indeed の雇用主選択画面を表示する認可リンクを取得するには、
https://secure.indeed.com/oauth/v2/authorizeエンドポイントをprompt=select_employerおよびscope=employer_accessクエリパラメーターとともに呼び出します。この呼び出しには、
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 をリダイレクト 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を設定した場合でも、リダイレクト URI にemployerパラメーターが常に含まれるとは 限りません。 -
雇用主アクセストークンを取得する に進みます。
カスタム雇用主選択画面を表示する
Indeed では、標準の Indeed 雇用主選択画面 を推奨しています。独自の画面を使用するには、次のようにします。
-
OAuth の同意画面を表示し、
employer_accessとoffline_accessスコープをリクエストするために、3-legged アクセストークンを取得します。レスポンスには、アクセストークン、ID トークン、リフレッシュトークンが含まれます。
-
現在のユーザーの雇用主を一覧表示するには、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 | ✔ |
または:
リフレッシュトークンを使用してアクセストークンを取得する場合、OAuth の同意画面は不要です。 |
client_id | ✔ | クライアント ID です。 |
client_secret | ✔ | クライアントシークレットです。 |
code | 認可コードを使用してアクセストークンを取得する場合は ✔ | 認可コードです。 |
redirect_uri | ✔ | URL エンコードされたリダイレクト URL です。 |
refresh_token | リフレッシュトークンを使用してアクセストークンを取得する場合は ✔ | リフレッシュトークンです。 |
employer | ✔ | 雇用主の ID です。ユーザーが選択した雇用主の ID を指定します。 |
レスポンスには、雇用主を表すアクセストークンが含まれます。
{ "access_token": "<access_token>", "scope": "employer_access", "token_type": "Bearer", "expires_in": 3600}アプリを登録したユーザーに関連付けられていない雇用主のアクセストークンをリクエストすると、Indeed は次のエラーを返します。
{ "error_description": "Invalid request", "error": "invalid_request"}このアクセストークンは、同意したユーザーに代わって、この雇用主に対してのみ API を呼び出すために使用します。
リフレッシュトークンをアクセストークンと交換する場合も、employer パラメーターを渡すことができます。
ユーザーが雇用主を選択しない場合、またはユーザーアカウントに関連付けられた雇用主が存在しない場合、リダイレクト URI には employer パラメーターが含まれません。
ユーザー情報を取得する
アプリを登録したユーザーアカウントに関する情報を取得するには、次のいずれかを使用します。
ID トークン
ID トークンは、アクセストークンを取得すると自動的に受け取る Base64 エンコードされた JSON Web Token(JWT)です。ID トークンは、Indeed がユーザーを認証したことを証明します。
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フィールドを含めるには、emailscope をリクエストします。 -
アクセストークンを取得するには、
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"}
userinfo エンドポイント
現在のユーザーのアカウント情報を取得するには、Authorization: Bearer <access_token> ヘッダーを指定して https://secure.indeed.com/v2/api/userinfo に GET リクエストを送信します。このエンドポイントは、クエリパラメーターもリクエストボディも受け取りません。
たとえば、Log in with Indeed ボタンを作成する場合は、このエンドポイントを呼び出してアカウント情報を取得します。
レスポンスには、ID トークンが返すものと同じ情報が含まれます。
リクエストが成功すると、HTTP ステータスコード 200 とレスポンスペイロードが返されます。
HTTP/1.1 200 OKContent-Type: application/json
{ "sub": "248289761001", "email": "mina.ray@myemail.world", "email_verified": true}v2/api/userinfo のレスポンスフィールドをご覧ください。
v2/api/userinfo エンドポイントを呼び出すには:
-
emailスコープをリクエストして、emailフィールドとemail_verifiedフィールドを受け取ります。 -
認可コード グラントタイプで 3-legged アクセストークンを取得します。
-
Authorization: Bearer <access_token>ヘッダーを指定して、https://secure.indeed.com/v2/api/userinfoにGETリクエストを送信します:レスポンスには、ユーザーが OAuth アプリに付与したスコープに応じた情報が含まれます。
-
レスポンスには、ユーザーのアカウント ID である
subフィールドが表示されます。{"sub": "d2d1962c0664d970"} -
レスポンスには、
emailフィールドとemail_verifiedフィールドが表示されます。{"sub": "a95064930d19bbc7","email": "somebody+samples@indeed.com","email_verified": true} -
レスポンスには、ユーザーアカウントに関連付けられた雇用主、または広告主の一覧が表示されます。
{"sub": "bc8c847009a955c9","email": "somebody+employer@indeed.com","email_verified": true,"employers": [{"id": "084a39249af95beedfb90cc5d2b8833c","name": "Dharma Initiative"},{"id": "865e08b649774436ee1f410b611fad7c","name": "Umbrella Corporation"},{"id": "4bc393648e880bc94dd6cef8efbc8486","name": "US Robotics and Mechanical Men"}]}
-
ユーザーを複数の URL に動的にリダイレクトする
認可コードグラントタイプ(3-legged OAuth)を使用する OAuth クライアントアプリを登録する場合、Indeed は OAuth アプリのセキュリティベストプラクティスに従い、リダイレクト URL を 5 つまでに制限します。Glossaryをご覧ください。
ユーザーを複数の URL に動的にリダイレクトするには:
-
認可 URL に
stateパラメーターを追加します。https://secure.indeed.com/oauth/v2/authorize?client_id=6nwwcdklwgktryjw2j5fxh5t2fyneule7zg7mvw3pf9jbx3wmewzlxkdz1jxvs6b&redirect_uri=http%3A%2F%2Fwww.acerecruitersllc.com%2Foauth%2Findeed&response_type=code&scope=email+offline_access+employer_access&state=AnyValue -
Indeed は、リダイレクト URL に
code、iss、stateクエリパラメーターを返します。GET http://www.acerecruitersllc.com/oauth/indeed?code=rXZSMNyYQHQ&state=employer1234&iss=https%3A%2F%2Fsecure.indeed.com複数のプロバイダーに対して認証しない限り、
issパラメーターは無視できます。oauth/v2/authorize のレスポンスフィールドをご覧ください。
-
https://somesite.comなどの URL をstateパラメーターで渡すには、URL エンコードします。https://secure.indeed.com/oauth/v2/authorize?client_id=6nwwcdklwgktryjw2j5fxh5t2fyneule7zg7mvw3pf9jbx3wmewzlxkdz1jxvs6b&redirect_uri=http%3A%2F%2Fwww.acerecruitersllc.com%2Foauth%2Findeed&response_type=code&scope=email+offline_access+employer_access&state=https%3A%2F%2Fsomesite.com -
Indeed がユーザーをアプリにリダイレクトしたら、
stateパラメーターを使用して、https://somesite.comなどの別の宛先にリダイレクトします。
ガイドライン
認可コードの漏えいを防ぐ
信頼できない Web サイトにユーザーをリダイレクトすると、リクエストを送信したページの URL を保持する HTTP Referer ヘッダーに OAuth 認可コードが露出します。
また、認可コードが、state パラメーターで指定された Web サイトに露出する可能性もあります。その Web サイトでは、認可コードがログに記録される可能性が高くなります。
漏えいを防ぐには、ユーザーを信頼できないアプリにリダイレクトする前に、まずアプリ内の別の信頼できるページにリダイレクトします。HTTP Referer ヘッダーに表示されるのは最新の URL のみであり、チェーン内のそれ以前の URL は表示されません。
リダイレクト URI にクエリパラメーターを追加しない
Indeed は現在、redirect_uri パラメーターでクエリパラメーターを受け付けます。
https://secure.indeed.com/oauth/v2/authorize?client_id=80f9f4bd6a34cac31daebe1a093a606ce6b34e91ae6cfa139432ae387269a529&response_type=code&state=random&scope=email+offline_access+employer_access&redirect_uri=https%3A%2F%2Fsomesite.com%3Freturn%3Dhttps%3A%2F%2Fsomeothersite.comこの例では、redirect_uri パラメーターは https://secure.indeed.com/oauth/v2/authorize URL の一部です。
redirect_uri の値は https://somesite.com?return=https://someothersite.com であり、別のリダイレクト URL が return クエリパラメーターに埋め込まれています。
redirect_uri のクエリパラメーターの代わりに、state パラメーターを使用してください。
関連項目
- 認証情報
- HTTP リクエストヘッダー
- oauth/v2/tokens endpoint
- v2/api/appinfo endpoint
- Basic 認証スキーム
- oauth/v2/tokens のリクエストボディパラメーター
- Troubleshoot OAuth errors
- Troubleshoot GraphQL errors