nodeSolidServer / nodeSolidServer/node-solid-server
Dynamic client registration accepts form encoded data but parses it incorrectly
還沒有人認領這個 Issue。
- 主要語言
- JavaScript
- 星號
- 1.8k
- 分支
- 308
- PR 合併指標
- 30 天內沒有已合併 PR
描述
I'm writing a python library to perform webid-oidc, according to the guide at https://github.com/solid/webid-oidc-spec/blob/master/application-user-workflow.md
At step 9 (Dynamic client registration), there is a link to https://openid.net/specs/openid-connect-registration-1_0.html
The spec says in section 3.1:
The Client sends an HTTP POST to the Client Registration Endpoint with a content type of application/json
I was initially sending form encoded data to this endpoint, but node-solid-server accepted the request:
A python request of:
data = {
"grant_types": ["implicit"],
"issuer": "https://localhost:8443",
"redirect_uris": ["https://localhost:8443/redirect"],
"response_types": ["id_token token"],
"scope": "openid profile"
}
r = requests.post("https://localhost:8443", data=data, verify=False)
results in an HTTP request of:
POST / HTTP/1.1
Host: localhost:8899
User-Agent: python-requests/2.25.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 164
Content-Type: application/x-www-form-urlencoded
grant_types=implicit&issuer=https%3A%2F%2Flocalhost%3A8443&redirect_uris=http%3A%2F%2Flocalhost%3A8888%2Fredirect&response_types=id_token+token&scope=openid+profile
node-solid-server accepts this request and adds to db/oidc/op/clients a file with the contents
{
"redirect_uris": "http://localhost:8888/redirect",
"client_id": "a1b6275fa73f653a7392f5440851356b",
"client_secret": "bdc6c73d1f6f4de3ded9f43a730a7d86",
"response_types": "id_token token",
"grant_types": "implicit",
"application_type": "web",
"id_token_signed_response_alg": "RS256",
"token_endpoint_auth_method": "client_secret_basic"
}
Note that it no longer includes the lists in the original request for grant_types, redirect_urls or response_types.
If I send the data as a json body with the correct content-type, the data is accepted correctly and generates the following client file:
{
"redirect_uris": [
"http://localhost:8888/redirect"
],
"client_id": "805187586c656faad7ad21e05c7d08b8",
"response_types": [
"id_token token"
],
"grant_types": [
"implicit"
],
"application_type": "web",
"id_token_signed_response_alg": "RS256",
"token_endpoint_auth_method": "client_secret_basic"
}
The incorrect data in the clients file results in an exception when trying to access the authorize url, because a list is expected when looking at the redirect_urls field: https://github.com/solid/oidc-op/blob/72e4cfa7870aab7913314cbbe5277d0bb559dcf8/src/handlers/AuthenticationRequest.js#L511
It's clear that I was submitting data in the wrong format, but node-solid-server still accepted it, even though the specification says that the content-type should be application/json (I see that it doesn't make a MAY/SHOULD/MUST claim here though...). Perhaps it makes sense for node-solid-server to return HTTP400 if the data format is incorrect?
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 src/handlers/AuthenticationRequest.js 中連結到的那一行開始,該處格式錯誤的用戶端資料隨後會導致例外,然後追蹤動態註冊如何解析 form-encoded 請求。完成標準是:錯誤的內容類型或資料形狀會以 HTTP 400 拒絕,同時有效的 application/json 註冊仍能保留其陣列欄位。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- javascript, node.js
- 領域
- api, authentication, backend
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 38/100