User API keys specification

사용자가 다음 엔드포인트를 사용할 때 detect-browser JavaScript를 건너뛰는 것이 합리적이라고 생각하시나요?

https://sitename.com/user-api-key/new

이들은 대부분 앱에서 리디렉션되어 해당 페이지에 도착할 가능성이 높으므로, JavaScript 엔진이 최신 상태인지 확인하는 것은 큰 의미가 없으며, 앱 내에서 사용할 API 키를 생성하려는 사용자의 동작을 차단할 뿐입니다.

하지만 작동하려면 로그인해야 합니다

네, 그게 문제예요. user-api-key/new로 리다이렉트되면 로그인 페이지로 이동하는데, 그때 브라우저 검사가 시작됩니다. API 키 생성을 위해 로그인을 허용해 주려니, 브라우저가 너무 오래되었다고 오류가 나요. 사용자가 API 키 생성을 위해만 방문한 경우라면 이 검사를 건너뛰는 건 어떨까요?

네, 그게 바로 문제입니다. JavaScript를 덜 사용해서 로그인하는 방법을 요청하는 셈인데, 우리가 지원하는 인증 옵션과 스팸 방지 조치가 매우 방대하기 때문에 이 작업은 엄청나게 복잡합니다.

1개의 좋아요

자바스크립트가 전혀 없어야 하는 것은 아닙니다. 그냥 로그인 폼에는 사이트 다른 곳에서 사용되는 모든 복잡한 기능이 정말로 필요하지 않잖아요? 적어도 인증/oauth2_basic 패스스루의 경우, 99%가 헤더와 리다이렉트로 처리되므로 필요 없어 보입니다. 저는 SailfishOS에 있는 앱이 .json 파일과 API 키 전달로 완벽하게 작동하는데, 이는 해당 기기의 브라우저가 esr78 파이어폭스 기반이라 대부분의 Discourse 인스턴스에서 차단되지만 API 키를 통해 우회할 수 있어서 매우 좋습니다. 다만 API 키를 얻는 유일한 방법이 데스크톱에서 200자 이상의 URL을 수동으로 입력한 후, 생성된 코드를 휴대폰으로 복사해서 디코딩하는 것인데, 이건 정말 터무니없습니다.

5개의 게시글이 새로운 주제로 분리되었습니다: User API keys should use OAEP padding

여러분 안녕하세요. 저는 서드파티 클라이언트를 사용하여 User API 키로 로그인을 하고 있었습니다. 예전에는 잘 작동했는데, 지금은 일부 사이트에서 오류 메시지가 나옵니다.

메시지는 다음과 같습니다.

Oops
The software powering this discussion forum encountered an unexpected problem. We apologize for the inconvenience.

Detailed information about the error was logged, and an automatic notification generated. We'll take a look at it.

No further action is necessary. However, if the error condition persists, you can provide additional detail, including steps to reproduce the error, by posting a discussion topic in the site's feedback category.

최근 버전에서 이 기능에 변경 사항이 있었나요?

"로그인"을 말씀하시는 건가요? 실제로 무엇을 하고 계신지는 모르겠지만, 그 작업을 수행하는 더 나은 방법은 discourse connect일 것 같습니다.

오류에 대한 추가 정보를 얻으려면 로그를 확인해야 합니다.

커스텀 UI를 사용하고 있으므로 사용자 대신 작업을 수행해야 합니다. 이를 위해 사용자 API 키를 사용하고 있습니다.

이를 위해 다음 URL을 사용합니다.

https://discussion.fedoraproject.org/user-api-key/new?auth_redirect=discourse%3A%2F%2Fauth_redirect&application_name=DisCorkie&client_id=019695ed-8b7e-71b1-b55e-7efe8be1e9ae&scopes=read%2Cwrite%2Cnotifications%2Cpush%2Csession_info&push_url=https%3A%2F%2Fherxbktlunuawewahana.supabase.co%2Ffunctions%2Fv1%2Fdiscourse-webhook&public_key=-----BEGIN+PUBLIC+KEY-----%0AMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkD%2BNgNuAMv2ZSSR95V1B%0Afla9n3HbCPxAFB5%2B%2BitC9hlWEOfXZPToWAax5DuNUitzikLVWrldyRe%2BfgtS5F3Q%0AGvuzCtnFwyBNoIkuUva8uCzQ4K7T9RgnWIIfNsx2ONuk2GLhEeLUgb46F8VULbD3%0A4eExqEYoGK7tBxr3%2FnVYO%2FogOaibzhoZRiSh69gq6ptXWN9Pka%2Fb3%2Fp2hWF5MSwG%0AK39LiZKOzaga%2BsA0lA0BgdAw7rvnUBfpikL33mqtEJ6JDPhG5KIvBxY2m18T63cX%0AKakxrmZzWwibN%2Bzboe51Z49gtxJIiybaj5Yn7izPj39DKwiv5k%2FaSWFAe8FO0doQ%0AxVoh9qVhlvPq3DdLhcjC0djVNti3X%2BYC2bwUDSp%2BFhrLh%2BsYribCAp6P8TyZ5TZy%0Aw0WnDCatK%2FzPq53Fja2OUa5N43Zr4rSiyQMSdBaeOJwF33nOAHwztkDwOJvSh6fx%0Ag2mTR15Qe%2FRh6yY4fB610mcut%2BBU1oV4SEbxHYyroTaS06oO6k4EmvgJTiWK%2BVVC%0AfMGgFvoPXktKckK0q7xj32PiSTVlYURb27ap7yAHzFKePYkJdo0Sd3Jzghe1RdSg%0A4teQs4VecqIe%2Bv6p7BurFgwlKZyWN0n89u8%2BXihwwwOcVp1UHblqbl%2FKYi5%2BgK6O%0AyahsLRGMGllNIsqarYCZ9nkCAwEAAQ%3D%3D%0A-----END+PUBLIC+KEY-----%0A&nonce=-1646128802

여기서

매개변수
auth_redirect: discourse://auth_redirect
application_name: DisCorkie
client_id: 019695ed-8b7e-71b1-b55e-7efe8be1e9ae
scopes: read,write,notifications,push,session_info
push_url: https://herxbktlunuawewahana.supabase.co/functions/v1/discourse-webhook
public_key:
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkD+NgNuAMv2ZSSR95V1B
fla9n3HbCPxAFB5++itC9hlWEOfXZPToWAax5DuNUitzikLVWrldyRe+fgtS5F3Q
GvuzCtnFwyBNoIkuUva8uCzQ4K7T9RgnWIIfNsx2ONuk2GLhEeLUgb46F8VULbD3
4eExqEYoGK7tBxr3/nVYO/ogOaibzhoZRiSh69gq6ptXWN9Pka/b3/p2hWF5MSwG
K39LiZKOzaga+sA0lA0BgdAw7rvnUBfpikL33mqtEJ6JDPhG5KIvBxY2m18T63cX
KakxrmZzWwibN+zboe51Z49gtxJIiybaj5Yn7izPj39DKwiv5k/aSWFAe8FO0doQ
xVoh9qVhlvPq3DdLhcjC0djVNti3X+YC2bwUDSp+FhrLh+sYribCAp6P8TyZ5TZy
w0WnDCatK/zPq53Fja2OUa5N43Zr4rSiyQMSdBaeOJwF33nOAHwztkDwOJvSh6fx
g2mTR15Qe/Rh6yY4fB610mcut+BU1oV4SEbxHYyroTaS06oO6k4EmvgJTiWK+VVC
fMGgFvoPXktKckK0q7xj32PiSTVlYURb27ap7yAHzFKePYkJdo0Sd3Jzghe1RdSg
4teQs4VecqIe+v6p7BurFgwlKZyWN0n89u8+XihwwwOcVp1UHblqbl/KYi5+gK6O
yahsLRGMGllNIsqarYCZ9nkCAwEAAQ==
-----END PUBLIC KEY-----
nonce:-1646128802

/login으로 리다이렉트되며, 브라우저가 /session/csrf를 성공적으로 호출합니다. 여기까지는 문제가 없습니다.

그러나 브라우저가 /auth/oauth2_basic을 호출할 때 500 오류가 발생합니다.

응답은 이 오류 메시지만 반환되며 추가 정보는 없습니다.

Discourse hub도 유사한 인증 플로우를 수행하지만 정상적으로 작동합니다. 제가 놓치고 있는 부분이 있을까요?

/logs에 뭐가 있나요?

2개의 좋아요

조사를 해본 결과, 4096비트 키를 사용했기 때문에 이 문제가 발생했음을 확인했습니다. 키 크기를 2048비트로 변경하니 정상적으로 작동하기 시작했습니다.

이 키 크기는 필수 요구사항인가요? 어딘가에 문서화되어 있나요?

3개의 좋아요