SRE部 佐竹です。
本日は OneLogin で発生するエラーの回避策について記載します。
- はじめに
- 401 Unauthorized Error
- 実際に試したコマンド
- エラーの回避策
- rfc6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage
- まとめ
はじめに
OneLogin はクラウド時代にふさわしい、シングルサインオンを提供するID管理の SaaS です。
今回は、この OneLogin の API に関連した記事となります。
401 Unauthorized Error
OneLogin の API には、バージョン1とバージョン2が存在します。

そして、APIバージョン1では問題なく StatusCode : 200 を返却するものの、バージョン2では エラー となる場合があります。具体的には、PowerShellの場合は以下に記載するエラーが返却されます。
Invoke-WebRequest : {"message":"Unauthorized","name":"UnauthorizedError","statusCode":401}
実際に試したコマンド
例として、「Get Users」を利用します。
以下のコマンドはバージョン1であり、成功(200)します。URLに /1/ が含まれています。
Invoke-WebRequest https://api.us.onelogin.com/api/1/users/1234567890 -Headers @{ Authorization = "bearer:1234567890123456789012345678901234567890123456789012345678901234" }
以下のコマンドはバージョン2であり、失敗(401)します。URLに /2/ が含まれています。
Invoke-WebRequest https://api.us.onelogin.com/api/2/users/1234567890 -Headers @{ Authorization = "bearer:1234567890123456789012345678901234567890123456789012345678901234" }
具体的には、以下のエラーメッセージが返却されます。
Invoke-WebRequest : {"message":"Unauthorized","name":"UnauthorizedError","statusCode":401}
発生場所 行:1 文字:1
+ Invoke-WebRequest https://api.us.onelogin.com/api/2/users/1234567890 -H ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebExce
ption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
これらのコマンドの差は、バージョン指定の /1/ が /2/ かどうかの差分しかありません。しかし、バージョン2だと失敗してしまうのです。
エラーの回避策
回避策は、 "bearer: の後に 半角スペースを1つ記載する となります。つまり、以下の通りだと成功します。
Invoke-WebRequest https://api.us.onelogin.com/api/2/users/1234567890 -Headers @{ Authorization = "bearer: 1234567890123456789012345678901234567890123456789012345678901234" }
これは、bearer: の 直後は半角スペース1つが必須という取り決めによるものです。これについて、仕様を調べてみました。
rfc6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage
実のところ、この仕様は RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage で定められています。
OAuth 2.0 Authorization においては、RFC上で以下の記載があります。
credentials = "Bearer" 1*SP b64token
この 1*SP という表記がわかりにくいのですが、1つのスペース(シングルスペース)を Credential に対して渡すときには付与する必要があるということです。
というわけで、これは OAuth 2.0 Authorization の仕様によるものという確認が取れました。
まとめ

OneLogin のAPIをバージョン1からバージョン2にすると 401 Unauthorized Error が発生してしまった場合、 "bearer: の後に1つのスペースを入れましょう!念のために記載すると、バージョン1はスペースがあってもなくても成功(200)します。
ではまたお会いしましょう。
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
セキュリティサービス部所属。AWS資格全冠。2010年1月からAWSを業務利用してきています。主な表彰歴 2021-2022 AWS Ambassadors/2020-2025 Japan AWS Top Engineers/2020-2025 All Certifications Engineers。AWSのコスト削減やマルチアカウント管理と運用を得意としています。