|
13 | 13 |
|
14 | 14 | from bkpaas_auth.conf import bkauth_settings |
15 | 15 | from bkpaas_auth.core.constants import ProviderType |
16 | | -from bkpaas_auth.core.exceptions import InvalidTokenCredentialsError, ServiceError |
| 16 | +from bkpaas_auth.core.exceptions import InvalidTokenCredentialsError, ResponseError, ServiceError |
17 | 17 | from bkpaas_auth.core.plugins import BkTicketPlugin, BkTokenPlugin |
18 | 18 | from bkpaas_auth.core.token import ( |
19 | 19 | LoginToken, |
20 | 20 | RequestBackend, |
21 | 21 | TokenRequestBackend, |
| 22 | + UserAccount, |
22 | 23 | create_user_from_token, |
23 | 24 | mocked_create_user_from_token, |
24 | 25 | ) |
@@ -53,19 +54,33 @@ def __init__(self): |
53 | 54 |
|
54 | 55 | def authenticate(self, request: HttpRequest, auth_credentials: Dict) -> Optional[Union[User, AnonymousUser]]: |
55 | 56 | try: |
56 | | - username = self.request_backend.request_username(**auth_credentials) |
| 57 | + user_account: UserAccount = self.request_backend.request_user_account(**auth_credentials) |
| 58 | + |
| 59 | + if bkauth_settings.ENABLE_MULTI_TENANT_MODE and not user_account.tenant_id: |
| 60 | + raise ImproperlyConfigured( |
| 61 | + "No tenant information found. You may check whether BKAUTH_USER_INFO_APIGW_URL is set to " |
| 62 | + "correct gateway url that can retrieve the user's tenant information" |
| 63 | + ) |
| 64 | + |
57 | 65 | login_token = generate_random_token() |
58 | 66 | token = LoginToken( |
59 | 67 | login_token=login_token, |
60 | 68 | expires_in=bkauth_settings.LOGIN_TOKEN_EXPIRE_IN, |
61 | 69 | ) |
62 | | - token.user_info = UserInfo(username=username) |
| 70 | + token.user_info = UserInfo( |
| 71 | + username=user_account.bk_username, |
| 72 | + display_name=user_account.display_name, |
| 73 | + tenant_id=user_account.tenant_id, |
| 74 | + ) |
63 | 75 | logger.debug("New login token exchanged by credentials") |
| 76 | + except ResponseError as e: |
| 77 | + logger.warning(f"authenticate error: {e}") |
| 78 | + return None |
64 | 79 | except InvalidTokenCredentialsError: |
65 | | - logger.warning("authenticate error, invalid credentials given") |
| 80 | + logger.warning("authenticate error: invalid credentials given") |
66 | 81 | return None |
67 | 82 | except ServiceError: |
68 | | - logger.warning("authenticate error, Error requesting third-party API service") |
| 83 | + logger.warning("authenticate error: unable to request backend services") |
69 | 84 | return None |
70 | 85 |
|
71 | 86 | return self.get_user_by_token(token) |
@@ -164,6 +179,9 @@ def connect_to_django_user(self, user: User): |
164 | 179 | db_user.provider_type = user.provider_type |
165 | 180 | db_user.bkpaas_user_id = user.bkpaas_user_id |
166 | 181 | db_user.token = user.token |
| 182 | + db_user.display_name = getattr(user, "display_name", user.username) |
| 183 | + db_user.tenant_id = getattr(user, "tenant_id", None) |
| 184 | + |
167 | 185 | return db_user |
168 | 186 |
|
169 | 187 | def configure_user(self, db_user, bk_user: User): |
|
0 commit comments