Spaces:
Sleeping
Sleeping
""" | |
Example Custom SSO Handler | |
Use this if you want to run custom code after litellm has retrieved information from your IDP (Identity Provider). | |
Flow: | |
- User lands on Admin UI | |
- LiteLLM redirects user to your SSO provider | |
- Your SSO provider redirects user back to LiteLLM | |
- LiteLLM has retrieved user information from your IDP | |
- Your custom SSO handler is called and returns an object of type SSOUserDefinedValues | |
- User signed in to UI | |
""" | |
from fastapi_sso.sso.base import OpenID | |
from litellm.proxy._types import LitellmUserRoles, SSOUserDefinedValues | |
from litellm.proxy.management_endpoints.internal_user_endpoints import user_info | |
async def custom_sso_handler(userIDPInfo: OpenID) -> SSOUserDefinedValues: | |
try: | |
print("inside custom sso handler") # noqa | |
print(f"userIDPInfo: {userIDPInfo}") # noqa | |
if userIDPInfo.id is None: | |
raise ValueError( | |
f"No ID found for user. userIDPInfo.id is None {userIDPInfo}" | |
) | |
# check if user exists in litellm proxy DB | |
_user_info = await user_info(user_id=userIDPInfo.id) | |
print("_user_info from litellm DB ", _user_info) # noqa | |
return SSOUserDefinedValues( | |
models=[], | |
user_id=userIDPInfo.id, | |
user_email=userIDPInfo.email, | |
user_role=LitellmUserRoles.INTERNAL_USER.value, | |
max_budget=10, | |
budget_duration="1d", | |
) | |
except Exception: | |
raise Exception("Failed custom auth") | |