Skip to content

Commit 391ac94

Browse files
committed
💩(resource-server) open all APIs to RS
This provides a base configuration to allow to access all API via OIDC resource server authentication.
1 parent 9aa2074 commit 391ac94

File tree

3 files changed

+63
-4
lines changed

3 files changed

+63
-4
lines changed

src/backend/core/api/viewsets.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import rest_framework as drf
2626
from botocore.exceptions import ClientError
2727
from lasuite.malware_detection import malware_detection
28+
from lasuite.oidc_resource_server.authentication import ResourceServerAuthentication
2829
from rest_framework import filters, status, viewsets
2930
from rest_framework import response as drf_response
3031
from rest_framework.permissions import AllowAny
@@ -429,9 +430,7 @@ class DocumentViewSet(
429430
ordering = ["-updated_at"]
430431
ordering_fields = ["created_at", "updated_at", "title"]
431432
pagination_class = Pagination
432-
permission_classes = [
433-
permissions.DocumentAccessPermission,
434-
]
433+
permission_classes = [permissions.DocumentAccessPermission]
435434
queryset = models.Document.objects.all()
436435
serializer_class = serializers.DocumentSerializer
437436
ai_translate_serializer_class = serializers.AITranslateSerializer
@@ -668,7 +667,10 @@ def trashbin(self, request, *args, **kwargs):
668667
return self.get_response_for_queryset(queryset)
669668

670669
@drf.decorators.action(
671-
authentication_classes=[authentication.ServerToServerAuthentication],
670+
authentication_classes=[
671+
authentication.ServerToServerAuthentication,
672+
ResourceServerAuthentication,
673+
],
672674
detail=False,
673675
methods=["post"],
674676
permission_classes=[permissions.IsAuthenticated],

src/backend/core/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.urls import include, path, re_path
55

66
from lasuite.oidc_login.urls import urlpatterns as oidc_urls
7+
from lasuite.oidc_resource_server.urls import urlpatterns as resource_server_urls
78
from rest_framework.routers import DefaultRouter
89

910
from core.api import viewsets
@@ -44,6 +45,7 @@
4445
[
4546
*router.urls,
4647
*oidc_urls,
48+
*resource_server_urls,
4749
re_path(
4850
r"^documents/(?P<resource_id>[0-9a-z-]*)/",
4951
include(document_related_router.urls),

src/backend/impress/settings.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ class Base(Configuration):
328328
REST_FRAMEWORK = {
329329
"DEFAULT_AUTHENTICATION_CLASSES": (
330330
"rest_framework.authentication.SessionAuthentication",
331+
"lasuite.oidc_resource_server.authentication.ResourceServerAuthentication",
331332
),
332333
"DEFAULT_PARSER_CLASSES": [
333334
"rest_framework.parsers.JSONParser",
@@ -585,6 +586,60 @@ class Base(Configuration):
585586
default=True, environ_name="ALLOW_LOGOUT_GET_METHOD", environ_prefix=None
586587
)
587588

589+
# OIDC - Docs as a resource server
590+
OIDC_OP_URL = values.Value(
591+
default=None, environ_name="OIDC_OP_URL", environ_prefix=None
592+
)
593+
OIDC_OP_INTROSPECTION_ENDPOINT = values.Value(
594+
environ_name="OIDC_OP_INTROSPECTION_ENDPOINT", environ_prefix=None
595+
)
596+
OIDC_VERIFY_SSL = values.BooleanValue(
597+
default=True, environ_name="OIDC_VERIFY_SSL", environ_prefix=None
598+
)
599+
OIDC_TIMEOUT = values.IntegerValue(
600+
default=3, environ_name="OIDC_TIMEOUT", environ_prefix=None
601+
)
602+
OIDC_PROXY = values.Value(None, environ_name="OIDC_PROXY", environ_prefix=None)
603+
604+
OIDC_RS_BACKEND_CLASS = "lasuite.oidc_resource_server.backend.ResourceServerBackend"
605+
OIDC_RS_AUDIENCE_CLAIM = values.Value( # The claim used to identify the audience
606+
default="client_id", environ_name="OIDC_RS_AUDIENCE_CLAIM", environ_prefix=None
607+
)
608+
OIDC_RS_PRIVATE_KEY_STR = values.Value(
609+
default=None,
610+
environ_name="OIDC_RS_PRIVATE_KEY_STR",
611+
environ_prefix=None,
612+
)
613+
OIDC_RS_ENCRYPTION_KEY_TYPE = values.Value(
614+
default="RSA",
615+
environ_name="OIDC_RS_ENCRYPTION_KEY_TYPE",
616+
environ_prefix=None,
617+
)
618+
OIDC_RS_ENCRYPTION_ALGO = values.Value(
619+
default="RSA-OAEP",
620+
environ_name="OIDC_RS_ENCRYPTION_ALGO",
621+
environ_prefix=None,
622+
)
623+
OIDC_RS_ENCRYPTION_ENCODING = values.Value(
624+
default="A256GCM",
625+
environ_name="OIDC_RS_ENCRYPTION_ENCODING",
626+
environ_prefix=None,
627+
)
628+
OIDC_RS_CLIENT_ID = values.Value(
629+
None, environ_name="OIDC_RS_CLIENT_ID", environ_prefix=None
630+
)
631+
OIDC_RS_CLIENT_SECRET = values.Value(
632+
None,
633+
environ_name="OIDC_RS_CLIENT_SECRET",
634+
environ_prefix=None,
635+
)
636+
OIDC_RS_SIGNING_ALGO = values.Value(
637+
default="ES256", environ_name="OIDC_RS_SIGNING_ALGO", environ_prefix=None
638+
)
639+
OIDC_RS_SCOPES = values.ListValue(
640+
[], environ_name="OIDC_RS_SCOPES", environ_prefix=None
641+
)
642+
588643
# AI service
589644
AI_FEATURE_ENABLED = values.BooleanValue(
590645
default=False, environ_name="AI_FEATURE_ENABLED", environ_prefix=None

0 commit comments

Comments
 (0)