Leser: 8
1 2 3 4
if( my $auth = $ENV{HTTP_AUTHORIZATION} ){ my ($basic, $cred) = split /\s+/, $auth; ( $ENV{HTTP_USER}, $ENV{HTTP_PASS} ) = split ":", MIME::Base64::decode_base64($cred); }
2024-05-26T09:24:58 GwenDragonAnsonsten lassen sich ja auch Umgebungsvariablem regelbasiert mit Apache2s SetEnv und SetEnvIf setzen.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
1
2
3
4
5
6
7
8
9
RequestHeader set X-AUTH-DECODE "expr=%{HTTP:Authorization}"
RequestHeader edit X-AUTH-DECODE "^Basic (.*)$" $1
RequestHeader set USER "expr=%{unbase64:%{HTTP:X-AUTH-DECODE}}"
RequestHeader set PASSWORD "expr=%{unbase64:%{HTTP:X-AUTH-DECODE}}"
RequestHeader edit USER "(.*):.*$" $1
RequestHeader edit PASSWORD ".*:(.*)$" $1
RewriteRule .* - [E=HTTP_USER:%{HTTP:User}]
RewriteRule .* - [E=HTTP_PASSWORD:%{HTTP:Password}]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
2024-05-26T16:41:20 rostiIm Übrigen finde ich HTTP_USER treffender als REMOTE_USER. Denn es geht um HTTP-Authorization.
QuoteMeta-variables with names beginning with "HTTP_" contain values read
from the client request header fields, if the protocol used is HTTP.
QuoteWenn im Request ein Header User: wrdlbrmpfd mitgeschickt wird, dann macht ein CGI-konformer Server (der Apache per mod_cgi) daraus die Umgebungsvariable HTTP_USER mit dem Wert wrdlbrmpfd.
2024-06-04T17:19:38 rostiD.H. daß man auch mit HTTP Authorization eine Zugangskontrolle vom Code vollständig trennen kann!
2024-06-07T05:51:52 bianca2024-06-04T17:19:38 rostiD.H. daß man auch mit HTTP Authorization eine Zugangskontrolle vom Code vollständig trennen kann!
Und in welchen Fällen braucht man eine Benutzeranmeldung und gleichzeitig im Code keine Info, welcher User gerade handelt?
2024-06-07T05:51:52 bianca2024-06-04T17:19:38 rostiD.H. daß man auch mit HTTP Authorization eine Zugangskontrolle vom Code vollständig trennen kann!
Und in welchen Fällen braucht man eine Benutzeranmeldung und gleichzeitig im Code keine Info, welcher User gerade handelt?
2024-06-04T17:19:38 rostiD.H. daß man auch mit HTTP Authorization eine Zugangskontrolle vom Code vollständig trennen kann!
2024-06-08T07:10:33 rostiVermutlich können andere Frameworks sowas gar nicht bzw. lösen das alles mit Spaghetti-Code.
QuoteSyncst du dann immer die .htaccess auf alle Server?
2024-06-10T15:20:47 rostiWie trennst Du denn Authorization vom Code?
QuoteDa ich es noch immer nicht begreife frage ich nochmal:
In welchen Fällen braucht man eine Authorization (ich definiere das als Login), von der die eigentliche Anwendung nichts weiß?
2024-06-10T15:20:47 rostiQuoteWie trennst Du denn Authorization vom Code?
Inwiefern trennen? Ich habe in der Regel kleine oder auch größere REST-APIs.
Da ich in der Regel mit FastAPI&Python arbeite, so:
Code: (dl )1
2
3
4@router.get("/users", dependencies=[Depends(user_with_admin_rights)])
async def get_users(db: Annotated[AsyncSession, Depends(get_db)]) -> UserResponse:
result = await db.execute(...)
return [UserResponse.from_orm(u) for u in result.scalars()]
D.h. in den Dependencies wird definiert, wer das machen darf. Die Funktion user_with_admin_rights checkt dann, ob der aktuelle User ein Admin ist und das tun darf. (normalerweise gibt es mehr als nur User und Admin, im aktuellen Projekt habe ich gerade 4 Rollen, die alle unterschiedliche Dinge tun dürfen).
Wenn man will, kann man diese Dependency auch dem Router hinzufügen, sodass dann z.B. gleich alle Endpunkte unter /users (oder wo auch immer) bestimmte Rechte erfordern. Generell also über die Decorators gelöst. Glücklicherweise habe ich nur sehr selten den Fall, dass ich noch im Code selber eine Fallunterscheidung treffen muss (kommt aber vor).
Quote@router.get("/users", dependencies=[Depends(user_with_admin_rights)])...