feat(auth): added keycloak as a social login provider
This commit is contained in:
parent
bbdb0ae128
commit
42b01570ae
3 changed files with 33 additions and 4 deletions
|
|
@ -52,7 +52,7 @@
|
||||||
"fieldname": "social_login_provider",
|
"fieldname": "social_login_provider",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"label": "Social Login Provider",
|
"label": "Social Login Provider",
|
||||||
"options": "Custom\nFacebook\nFrappe\nGitHub\nGoogle\nOffice 365\nSalesforce\nfairlogin",
|
"options": "Custom\nFacebook\nFrappe\nGitHub\nGoogle\nOffice 365\nSalesforce\nfairlogin\nKeycloak",
|
||||||
"set_only_once": 1
|
"set_only_once": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -176,7 +176,7 @@
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2024-03-23 16:03:38.963265",
|
"modified": "2024-09-06 15:22:46.342392",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Integrations",
|
"module": "Integrations",
|
||||||
"name": "Social Login Key",
|
"name": "Social Login Key",
|
||||||
|
|
@ -200,4 +200,4 @@
|
||||||
"states": [],
|
"states": [],
|
||||||
"title_field": "provider_name",
|
"title_field": "provider_name",
|
||||||
"track_changes": 1
|
"track_changes": 1
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +56,15 @@ class SocialLoginKey(Document):
|
||||||
redirect_url: DF.Data | None
|
redirect_url: DF.Data | None
|
||||||
sign_ups: DF.Literal["", "Allow", "Deny"]
|
sign_ups: DF.Literal["", "Allow", "Deny"]
|
||||||
social_login_provider: DF.Literal[
|
social_login_provider: DF.Literal[
|
||||||
"Custom", "Facebook", "Frappe", "GitHub", "Google", "Office 365", "Salesforce", "fairlogin"
|
"Custom",
|
||||||
|
"Facebook",
|
||||||
|
"Frappe",
|
||||||
|
"GitHub",
|
||||||
|
"Google",
|
||||||
|
"Office 365",
|
||||||
|
"Salesforce",
|
||||||
|
"fairlogin",
|
||||||
|
"Keycloak",
|
||||||
]
|
]
|
||||||
user_id_property: DF.Data | None
|
user_id_property: DF.Data | None
|
||||||
# end: auto-generated types
|
# end: auto-generated types
|
||||||
|
|
@ -80,6 +88,8 @@ class SocialLoginKey(Document):
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Please enter Client Secret before social login is enabled"), exc=ClientSecretNotSetError
|
_("Please enter Client Secret before social login is enabled"), exc=ClientSecretNotSetError
|
||||||
)
|
)
|
||||||
|
if self.social_login_provider == "Keycloak":
|
||||||
|
self.api_endpoint = self.base_url + "/protocol/openid-connect/userinfo"
|
||||||
|
|
||||||
def set_icon(self):
|
def set_icon(self):
|
||||||
icon_map = {
|
icon_map = {
|
||||||
|
|
@ -206,6 +216,20 @@ class SocialLoginKey(Document):
|
||||||
"auth_url_data": json.dumps({"response_type": "code", "scope": "openid"}),
|
"auth_url_data": json.dumps({"response_type": "code", "scope": "openid"}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
providers["Keycloak"] = {
|
||||||
|
"provider_name": "Keycloak",
|
||||||
|
"enable_social_login": 1,
|
||||||
|
"base_url": "realms/master",
|
||||||
|
"custom_base_url": 1,
|
||||||
|
"redirect_url": "/api/method/frappe.integrations.oauth2_logins.login_via_keycloak/keycloak",
|
||||||
|
"api_endpoint": "realms/masterl/protocol/openid-connect/userinfo",
|
||||||
|
"api_endpoint_args": None,
|
||||||
|
"authorize_url": "/protocol/openid-connect/auth",
|
||||||
|
"access_token_url": "/protocol/openid-connect/token",
|
||||||
|
"user_id_property": "preferred_username",
|
||||||
|
"auth_url_data": json.dumps({"response_type": "code", "scope": "openid"}),
|
||||||
|
}
|
||||||
|
|
||||||
# Initialize the doc and return, used in patch
|
# Initialize the doc and return, used in patch
|
||||||
# Or can be used for creating key from controller
|
# Or can be used for creating key from controller
|
||||||
if initialize and provider:
|
if initialize and provider:
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,11 @@ def login_via_fairlogin(code: str, state: str):
|
||||||
login_via_oauth2("fairlogin", code, state, decoder=decoder_compat)
|
login_via_oauth2("fairlogin", code, state, decoder=decoder_compat)
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist(allow_guest=True)
|
||||||
|
def login_via_keycloak(code: str, state: str):
|
||||||
|
login_via_oauth2("keycloak", code, state, decoder=decoder_compat)
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
def custom(code: str, state: str):
|
def custom(code: str, state: str):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue