Re: [pgAdmin4][Patch] - RM 5457 - Kerberos Authentication - Phase 1

From: Khushboo Vashi <khushboo(dot)vashi(at)enterprisedb(dot)com>
To: Dave Page <dpage(at)pgadmin(dot)org>
Cc: Akshay Joshi <akshay(dot)joshi(at)enterprisedb(dot)com>, Aditya Toshniwal <aditya(dot)toshniwal(at)enterprisedb(dot)com>, pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: Re: [pgAdmin4][Patch] - RM 5457 - Kerberos Authentication - Phase 1
Date: 2021-01-18 07:30:37
Message-ID: CAFOhELcW2ELCg=K_j-MzE0rWjGHV3dNxrgO3737+i7gW9e_OiQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi,

Please find the attached updated patch with the below changes:

- Dependencies are added into Linux packages in the RPM/DEBs.
- Dev packages are added in the setup scripts for Linux.
- The required packages are added in the Dockerfile.
- Conditional gssapi 1.6.2 dependency is added for Python 3.5 in
requirements.txt.
- krb5 libs are not bundled with the Desktop packages, so added the gssapi
dependency into the try/catch block.
- .dockerignore is introduced to ignore unwanted files/folders like
node_modules etc., which will make the docker build fast. (By Ashesh Vashi)

Thanks,
Khushboo

On Fri, Jan 15, 2021 at 3:48 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:

> And another thought...
>
> Some of the Jenkins QA jobs setup the virtual environment for running
> tests themselves. I believe these might actually be the cause of some of
> the failures we saw initially with the commit - I'll review those, and
> ensure they won't try to build the gssapi module from source on Windows.
>
> On Thu, Jan 14, 2021 at 4:34 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:
>
>> FYI, I did a quick test (and browse of PyPI):
>>
>> - On Windows, it seems there is a binary wheel available:
>>
>> (gssapi) C:\Users\dpage>pip install gssapi
>> Collecting gssapi
>> Downloading gssapi-1.6.12-cp39-cp39-win_amd64.whl (670 kB)
>> |████████████████████████████████| 670 kB 3.3 MB/s
>> Collecting decorator
>> Downloading decorator-4.4.2-py2.py3-none-any.whl (9.2 kB)
>> Installing collected packages: decorator, gssapi
>> Successfully installed decorator-4.4.2 gssapi-1.6.12
>>
>> - On macOS, the wheel is built by pip, but it doesn't seem to have any
>> additional binary dependencies.
>>
>> This should simplify things a lot - we just need to ensure the build
>> scripts use the binary package on Windows, and install the build deps on
>> the Linux/Docker environments (and update the package builds with the
>> additional dependencies of course).
>>
>>
>> On Thu, Jan 14, 2021 at 4:04 PM Dave Page <dpage(at)pgadmin(dot)org> wrote:
>>
>>> Hi Khushboo,
>>>
>>> As you know, this has been rolled back as the buildfarm blew up. I think
>>> there are a number of TODOs that need to be addressed, given that the
>>> gssapi Python module is dependent on MIT Kerberos:
>>>
>>> In the patch:
>>>
>>> - Linux packages will need the additional dependencies to be declared in
>>> the RPM/DEBs.
>>> - The setup scripts for Linux will need to have the -dev packages added
>>> as appropriate.
>>> - The various READMEs that describe how to build packages will need to
>>> be updated.
>>> - The Dockerfile will need to be modified to add the required packages.
>>> - The Windows build will need to be updated so the installer ships
>>> additional required DLLs.
>>> - Are there any additional macOS dependencies? If so, they need to be
>>> handled.
>>>
>>> In the buildfarm:
>>>
>>> - All Linux build VMs need to be updated with the additional
>>> dependencies.
>>> - On Windows, we need to figure out how to build/ship KfW. It's a pain
>>> to build, which we would typically do ourselves to ensure we're
>>> consistently using the same buildchain. If we do build it ourselves:
>>> - Will the Python package find it during it's build?
>>> - We'll need to create a Jenkins job to perform the build.
>>> - Is any work required on macOS, or does it ship with everything that's
>>> needed? If not, we'll need to build it, and create the Jenkins job.
>>>
>>> One final thought: on Windows/macOS, can we force a binary installation
>>> from PIP (pip install --only-binary=gssapi gssapi)? If so, will that
>>> include the required libraries, as psycopg2-binary does?
>>>
>>>
>>> On Thu, Jan 14, 2021 at 8:18 AM Akshay Joshi <
>>> akshay(dot)joshi(at)enterprisedb(dot)com> wrote:
>>>
>>>> Thanks, patch applied.
>>>>
>>>> On Thu, Jan 14, 2021 at 1:42 PM Khushboo Vashi <
>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> Please ignore my previous patch, attached the updated one.
>>>>>
>>>>> Thanks,
>>>>> Khushboo
>>>>>
>>>>> On Thu, Jan 14, 2021 at 12:17 PM Khushboo Vashi <
>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Please find the attached updated patch.
>>>>>>
>>>>>> Thanks,
>>>>>> Khushboo
>>>>>>
>>>>>> On Thu, Jan 14, 2021 at 12:00 PM Akshay Joshi <
>>>>>> akshay(dot)joshi(at)enterprisedb(dot)com> wrote:
>>>>>>
>>>>>>> Hi Khushboo
>>>>>>>
>>>>>>> Seems you have attached the wrong patch. Please send the updated
>>>>>>> patch.
>>>>>>>
>>>>>>> On Wed, Jan 13, 2021 at 2:35 PM Khushboo Vashi <
>>>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Please find the attached updated patch.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Khushboo
>>>>>>>>
>>>>>>>> On Fri, Jan 1, 2021 at 1:07 PM Aditya Toshniwal <
>>>>>>>> aditya(dot)toshniwal(at)enterprisedb(dot)com> wrote:
>>>>>>>>
>>>>>>>>> Hi Khushboo,
>>>>>>>>>
>>>>>>>>> I've just done the code review. Apart from below, the patch looks
>>>>>>>>> good to me:
>>>>>>>>>
>>>>>>>>> 1) Move the auth source constants -ldap, kerberos out of app
>>>>>>>>> object. They don't belong there. You can create the constants
>>>>>>>>> somewhere else and import them.
>>>>>>>>>
>>>>>>>>> +app.PGADMIN_LDAP_AUTH_SOURCE = 'ldap'
>>>>>>>>>
>>>>>>>>> +app.PGADMIN_KERBEROS_AUTH_SOURCE = 'kerberos'
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Done
>>>>>>>>
>>>>>>>>> 2) Are we going to make kerberos default for wsgi ?
>>>>>>>>>
>>>>>>>>> *--- a/web/pgAdmin4.wsgi*
>>>>>>>>>
>>>>>>>>> *+++ b/web/pgAdmin4.wsgi*
>>>>>>>>>
>>>>>>>>> @@ -24,6 +24,10 @@ builtins.SERVER_MODE = True
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> import config
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>> +config.AUTHENTICATION_SOURCES = ['kerberos']
>>>>>>>>>
>>>>>>>>> +config.KERBEROS_AUTO_CREATE_USER = True
>>>>>>>>>
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Removed, it was only for testing.
>>>>>>>>
>>>>>>>>> 3) Remove the commented code.
>>>>>>>>>
>>>>>>>>> + # if self.form.data['email'] and
>>>>>>>>> self.form.data['password'] and \
>>>>>>>>>
>>>>>>>>> + # source.get_source_name() ==\
>>>>>>>>>
>>>>>>>>> + # current_app.PGADMIN_KERBEROS_AUTH_SOURCE:
>>>>>>>>>
>>>>>>>>> + # continue
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Removed the comment, it is actually the part of the code.
>>>>>>>>
>>>>>>>>> 4) KERBEROSAuthentication could be KerberosAuthentication
>>>>>>>>>
>>>>>>>>> class KERBEROSAuthentication(BaseAuthentication):
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Done.
>>>>>>>>
>>>>>>>>> 5) You can use the constants (ldap, kerberos) you had defined when
>>>>>>>>> creating a user.
>>>>>>>>>
>>>>>>>>> + 'auth_source': 'kerberos'
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Done.
>>>>>>>>
>>>>>>>>> 6) The below URLs belong to the authenticate module. Currently
>>>>>>>>> they are in the browser module. I would also suggest rephrasing the URL
>>>>>>>>> from /kerberos_login to /login/kerberos. Same for logout.
>>>>>>>>>
>>>>>>>> Done the rephrasing as well as moved to the authentication module.
>>>>>>>>
>>>>>>>>
>>>>>>>>> Also, even though the method GET works, we should use the POST
>>>>>>>>> method for login and DELETE for logout.
>>>>>>>>>
>>>>>>>> Kerberos_login just redirects the page to the actual login, so no
>>>>>>>> need for the POST method.
>>>>>>>> I followed the same method for the Logout user we have used for the
>>>>>>>> normal user.
>>>>>>>>
>>>>>>>>
>>>>>>>>> +(at)blueprint(dot)route("/kerberos_login",
>>>>>>>>>
>>>>>>>>> + endpoint="kerberos_login", methods=["GET"])
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> +(at)blueprint(dot)route("/kerberos_logout",
>>>>>>>>>
>>>>>>>>> + endpoint="kerberos_logout", methods=["GET"])
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>> On Tue, Dec 22, 2020 at 6:07 PM Akshay Joshi <
>>>>>>>>> akshay(dot)joshi(at)enterprisedb(dot)com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Aditya
>>>>>>>>>>
>>>>>>>>>> Can you please do the code review?
>>>>>>>>>>
>>>>>>>>>> On Tue, Dec 22, 2020 at 3:44 PM Khushboo Vashi <
>>>>>>>>>> khushboo(dot)vashi(at)enterprisedb(dot)com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> Please find the attached patch to support Kerberos
>>>>>>>>>>> Authentication in pgAdmin RM 5457.
>>>>>>>>>>>
>>>>>>>>>>> The patch introduces a new pluggable option for Kerberos
>>>>>>>>>>> authentication, using SPNEGO to forward kerberos tickets through a browser
>>>>>>>>>>> which will bypass the login page entirely if the Kerberos Authentication
>>>>>>>>>>> succeeds.
>>>>>>>>>>>
>>>>>>>>>>> The complete setup of the Kerberos Server + pgAdmin Server +
>>>>>>>>>>> Client is documented in a separate file and attached.
>>>>>>>>>>>
>>>>>>>>>>> This patch also includes the small fix related to logging #5829
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Khushboo
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> *Thanks & Regards*
>>>>>>>>>> *Akshay Joshi*
>>>>>>>>>> *pgAdmin Hacker | Principal Software Architect*
>>>>>>>>>> *EDB Postgres <http://edbpostgres.com>*
>>>>>>>>>>
>>>>>>>>>> *Mobile: +91 976-788-8246*
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Thanks,
>>>>>>>>> Aditya Toshniwal
>>>>>>>>> pgAdmin hacker | Sr. Software Engineer | *edbpostgres.com*
>>>>>>>>> <http://edbpostgres.com>
>>>>>>>>> "Don't Complain about Heat, Plant a TREE"
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Thanks & Regards*
>>>>>>> *Akshay Joshi*
>>>>>>> *pgAdmin Hacker | Principal Software Architect*
>>>>>>> *EDB Postgres <http://edbpostgres.com>*
>>>>>>>
>>>>>>> *Mobile: +91 976-788-8246*
>>>>>>>
>>>>>>
>>>>
>>>> --
>>>> *Thanks & Regards*
>>>> *Akshay Joshi*
>>>> *pgAdmin Hacker | Principal Software Architect*
>>>> *EDB Postgres <http://edbpostgres.com>*
>>>>
>>>> *Mobile: +91 976-788-8246*
>>>>
>>>
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EDB: http://www.enterprisedb.com
>>>
>>>
>>
>> --
>> Dave Page
>> Blog: http://pgsnake.blogspot.com
>> Twitter: @pgsnake
>>
>> EDB: http://www.enterprisedb.com
>>
>>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EDB: http://www.enterprisedb.com
>
>

Attachment Content-Type Size
RM_5457_v3.patch application/octet-stream 41.9 KB

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Akshay Joshi 2021-01-18 07:36:22 pgAdmin 4 commit: Fixed issues reported by SonarQube.
Previous Message Nikhil Mohite 2021-01-18 05:45:39 Patch for SonarQube fixes.