7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OAuth2.0認証 アクセストークン取得

Posted at

SharePoint REST API で疎通をしよ~

1.クライアントの登録(アドイン登録)

ブラウザ上で、{site collection url}/_layouts/15/AppRegNew.aspx にアクセス
例) https://test.sharepoint.com/sites/food/_layouts/15/appregnew.aspx

image.png

クライアントID:生成ボタンを押すと自動生成される
クライアントシークレット:生成ボタンを押すと自動生成される
タイトル:トークン取得時の同意画面表示されるクライアントの名前
アプリドメイン:localhostでも良いし、samiii.co.jp のようなドメインでも
リダイレクト先URL:redirect_uri ここに code が送付される

image.png

2.クライアントが扱うスコープの登録(作成したアプリに権限を付与する)

ブラウザ上で、 {site collection url}/_layouts/15/appInv.aspx にアクセス
例) https://test.sharepoint.com/sites/food/_layouts/15/appinv.aspx

image.png

アプリID:「②クライアントの登録(アドイン登録)」で登録したクライアントID
タイトル:アプリIDを入力し [参照]を押下すると登録されている内容が自動で表示される
アプリドメイン:アプリIDを入力し [参照]を押下すると登録されている内容が自動で表示される
リダイレクト先:アプリIDを入力し [参照]を押下すると登録されている内容が自動で表示される
権限の要求XML:権限の詳細は下記参照
 →アドインのアクセス許可とアクセス許可スコープの種類

image.png

3.登録したクライアント(アドイン)の確認

ブラウザ上で、 {site collection url}/_layouts/15/AppPrincipals.aspx にアクセス
例) https://test.sharepoint.com/sites/food/_layouts/15/AppPrincipals.aspx

image.png

・登録したクライアント(アドイン)のタイトル表示されていること
※登録したクライアントの削除は、左側の「✘」をクリックすると削除可能。

・アプリIDの@以降がテナント識別子になる
 アクセストークン取得時にテナント識別子が必要になる

4.認可コードの取得

 認可エンドポイントを実行
 ブラウザ上で、{site collection url}/_layouts/15/OAuthAuthorize.aspx
 そこに、下記パラメータを付しGETリクエストを送付しアクセス
 ・response_type:許可コードを要求する値。Oauth認証2.0の仕様で定義されている値
 ・client_id:「①クライアントの登録(アドイン登録)」で登録したクライアントID
 ・redirect_uri:「①クライアントの登録(アドイン登録)」で登録したリダイレクト先URI
 https://test.sharepoint.com/sites/food/_layouts/15/OAuthAuthorize.aspx?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}

image.png

image.png

※リダイレクト先のuriが存在しない場合、アクセスできませんと表示されると思うが、
?code= ~~~~が認可コードですので問題ないです。

5.認可コード grantでアクセストークンを取得する

 トークンエンドポイント、https://accounts.accesscontrol.windows.net/{テナント識別子}/tokens/OAuth/2
 そこに、下記パラメータを付しPOSTリクエストを送付する
 ・grant_type:認可コード grant であることを示す値。Oauth2.0仕様で定義されている値
 ・client_id:「①クライアントの登録(アドイン登録)」で登録したクライアントID + "@" + テナント識別子
 ・client_secret:「①クライアントの登録(アドイン登録)」で登録したクライアントシークレット
 ・redirect_uri:「①クライアントの登録(アドイン登録)」で登録したリダイレクト先URL
 ・resource:"00000003-0000-0ff1-ce00-000000000000/{SharePointドメイン名}@" + テナントの識別子 
 ・code:「④認可コード取得」で取得した認可コード
 ※00000003-0000-0ff1-ce00-000000000000SharePoint Onlineを表すPrincipal

6.PowerShell からアクセストークンを取得

PowerShell
# アクセストークンを取得するためのOAuth 2.0リクエストを作成
$tokenRequest = @{
   Uri         = "https://accounts.accesscontrol.windows.net/{テナント識別子}/tokens/OAuth/2"
   Method      = "POST"
   ContentType = "application/x-www-form-urlencoded"
   Body        = @{
       grant_type     = "authorization_code"
       client_id      = "{client_id}"
       client_secret  = "{client_secret}"
       redirect_uri   = "https://test.co.jp/oauth2/redirect_uri"
       resource       = "00000003-0000-0ff1-ce00-000000000000/test.sharepoint.com@{テナント識別子}"
       code           = "PAQABAAEAAAAmoFfGtYxvRrNriQdPKIZ-A4UHw3KvFiPrJNMWGeVkGAzqiV9vqQRNkeSAZJyF3fGfZWJ74JbKuo6g036tdNORwRgg9lF6VrUj71nVz7QuoP01oAqvo-P9iTxqNz4gDQAHhR0b_nzbnt0EOr9QuiNpgtEEwldvybX00gk-nSUfeEkFbVIAu68CNrlCyaPo0kGhnnjz_wLTLR60bI5qp0Yc-INC7TU19WXs7iOlOJVPZx7eXF0YP-ZCG-h3CFT4djhN_eEaAEhgRM_TNPCEOJmvE3lKqZEuGCjrbtMwRx5wu6FXUKz1jQXvj80AvXhab41MW8xGzQBrI_DwPhUR7aMEytmQdPtmTr8aXM1rPqMKDF-9s8brxA-xk3vayp3NLwMgAA"
   }
}

# リクエストを送信し、レスポンスを取得
$response = Invoke-WebRequest @tokenRequest

# レスポンスの内容を表示
$response.Content
レスポンス
{"token_type":"Bearer","expires_in":"28799","not_before":"1699489003","expires_on":"1699518103","resource":"00000003-0000-0ff1-ce00-000000000000/nishiyamasniscorp.sharepoint.com@31234f36-91b6-4e43-afcb-2567c8c0dcd3","access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IjlHbW55RlBraGMzaE91UjIybXZTdmduTG83WSIsImtpZCI6IjlHbW55RlBraGMzaE91UjIybXZTdmduTG83WSJ9.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvbmlzaGl5YW1hc25pc2NvcnAuc2hhcmVwb2ludC5jb21AMzEyMzRmMzYtOTFiNi00ZTQzLWFmY2ItMjU2N2M4YzBkY2QzIiwiaXNzIjoiMDAwMDAwMDEtMDAwMC0wMDAwLWMwMDAtMDAwMDAwMDAwMDAwQDMxMjM0ZjM2LTkxYjYtNGU0My1hZmNiLTI1NjdjOGMwZGNkMyIsImlhdCI6MTY5OTQ4OTAwMywibmJmIjoxNjk5NDg5MDAzLCJleHAiOjE2OTk1MTgxMDMsImFjdG9yIjoiYzliODA4NmQtMGFmZi00MWY3LWJlMTgtYWEyNzdhM2JkZWJhQDMxMjM0ZjM2LTkxYjYtNGU0My1hZmNiLTI1NjdjOGMwZGNkMyIsImlkZW50aXR5cHJvdmlkZXIiOiJ1cm46ZmVkZXJhdGlvbjptaWNyb3NvZnRvbmxpbmUiLCJuYW1laWQiOiIxMDAzMjAwMkZDNTY2QzcxIn0.tHY6kyWdaTL5yA_o8FH01Ira4j7kcx7NUkJS-FBI2u7_DwXa6W5kFIXpzZdNVl2Hmb9o3kfFFMbQ8sx9OPfrH5ooiS5b7yJTadM2w_KCIgYQm_c8w4Z6i-CJqGNNr5SaYWNxO5sd3sdGdx6OA9Ch_52mauo3yTkb_f0lLd5fgbAwnglXODAnREQphZX1vmXOBCDTxX5BMQ3U3QJ5tz920VKoqU_DTAmtrlBi9JuGEj0yZJnpbX9ikDJZqlNLkHmKL2hR8eXGXobYJh-6XR5OSlfiJenTQ7SamcgPqjdR9uX8Wjw2RgTiVweVtfemAq9-ykNCmkc67eTYxDNXBMaBZQ","refresh_token":"PAQABAAEAAAAmoFfGtYxvRrNriQdPKIZ-t-w_3ik9v-qdqX7CwEajPa4PW66zmZ9Giqj3-EN8ZloVCF4AmPpiL8URfYUNoeWRWyGp8SwB_n73ph1znEV0qvtVzp9sBiv4pXZe54RFVdYq4X0RkmK-dPiszDmdrWikkuxusa_a7EkvHeP3k8Q1J4bAf_Bjz64ZIj8KRlU1u6Rn7p_rYZLk4_Jz1j4rc_Rru8eKrVtK96TFELIWgQ-vhc5VxO_WXKP_asjZUxzCekn-dEQmYQbHAlfxXWOOZKxp02JoXMfuTXXBWGzCFUfK0yAA"}

grant_type = "authorization_code" の場合、リフレッシュトークンが発行されます。
上記のアクセストークンの有効期限は8時間のため、同じクライアント情報から取得したい場合は、
リフレッシュトークンを使おう!

リフレッシュトークン使用
# リフレッシュトークンを用い、アクセストークンを取得するためのOAuth 2.0リクエストを作成
$tokenRequest = @{
   Uri         = "https://accounts.accesscontrol.windows.net/{テナント識別子}/tokens/OAuth/2"
   Method      = "POST"
   ContentType = "application/x-www-form-urlencoded"
   Body        = @{
       grant_type     = "refresh_token"
    refresh_token  = "PAQABAAEAAAAmoFfGtYxvRrNriQdPKIZ-tZ5b2dQTkq37cT6m1qgrJZIMiXCFX3fAI9zE9MNR-F1AbxYHq-GQJ7uKSW4m09nAsjc1ckawXkSxHkmMtDH0OewJYt_i809WCWXXzOMwIkaHjWUoRf-eoW_kaKII5BGqWwYcsJJWvXs2P8yhlG0SlyrAXUum6WmxWHolPsaBOcABteVqg6mHXcE-Mk4E1XpNyjZ5OPWEsGj59P3OxTNvlrcu5I5T8_SJuW4EgS3zKoymtQ5N0mYbDVHmDjXujiGzxvqwh8E49x_sKrVB23gthSAA"
       client_id      = "{client_id}"
       client_secret  = "{client_secret}"
       redirect_uri   = "https://test.co.jp/oauth2/redirect_uri"
       resource       = "00000003-0000-0ff1-ce00-000000000000/test.sharepoint.com@{テナント識別子}"
   }
}

# リクエストを送信し、レスポンスを取得
$response = Invoke-WebRequest @tokenRequest

# レスポンスの内容を表示
$response.Content

参考


著者: E.R (株式会社ウィズツーワン)
7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?