Thanks I will try that out cause the only thing that I got to work today 
was openid and I am not so sure if that is a good option for that .

urban....@gmail.com schrieb am Montag, 6. Februar 2023 um 14:21:27 UTC+7:

> "Did you figure it out in the end cause I am facing the same issue right 
> now :)"
>
> We didn't yet end up using AD auth in production, though I did eventually 
> have a *rudimentary *working version. 
>
> I ended up using the python msal library directly.
>
> https://github.com/AzureAD/microsoft-authentication-library-for-python
>
>
>
> redirect_url = "https://www.ourwebsite/token";
> b2c_tenant = "some-uuid"
> signupsignin_user_flow = "B2C_1_signupsignin1"
> editprofile_user_flow = "B2C_1_profileediting1"
> resetpassword_user_flow = "B2C_1_passwordreset1"  # Note: Legacy setting.
> authority_template = "https://login.microsoftonline.com/{tenant}";
> CLIENT_ID = "some-uuid"
> CLIENT_SECRET = "some-uuid" 
>
> AUTHORITY = authority_template.format(
>     tenant=b2c_tenant, user_flow=signupsignin_user_flow)
> B2C_PROFILE_AUTHORITY = authority_template.format(
>     tenant=b2c_tenant, user_flow=editprofile_user_flow)
> B2C_RESET_PASSWORD_AUTHORITY = authority_template.format(
>     tenant=b2c_tenant, user_flow=resetpassword_user_flow)
> REDIRECT_PATH = "/getAToken"  # Used for forming an absolute URL to your 
> redirect URI.
> ENDPOINT = '' # Application ID URI of app registration in Azure portal
> SCOPE = []  # Example with two exposed scopes: ["demo.read", "demo.write"]
> SESSION_TYPE = "filesystem"  # Specifies the token cache should be stored 
> in server-side session
>
> def _load_cache():
>     cache = msal.SerializableTokenCache()
>     if session.get("token_cache"):
>         cache.deserialize(session["token_cache"])
>     return cache
>
> def _save_cache(cache):
>     if cache.has_state_changed:
>         session["token_cache"] = cache.serialize()
>
> def _build_msal_app(cache=None, authority=None):
>     return msal.ConfidentialClientApplication(
>         app_config.CLIENT_ID, authority=authority or app_config.AUTHORITY,
>         client_credential=app_config.CLIENT_SECRET, token_cache=cache)
>
> def _build_msal_app(cache=None, authority=None):
>     return msal.ConfidentialClientApplication(
>         CLIENT_ID, authority=authority or AUTHORITY,
>         client_credential=CLIENT_SECRET, token_cache=cache)
>
> def _build_auth_code_flow(authority=None, scopes=None):
>     return _build_msal_app(authority=authority).initiate_auth_code_flow(
>         scopes or [],
>         redirect_uri=redirect_url)
>
> Then I use these functions on the login page.
>
> Something like this:
>         session["flow"] = _build_auth_code_flow(scopes=SCOPE) if 
> settings.enable_ad else None
>         ad_login_url = session['flow']['auth_uri'] if session["flow"] else 
> ''
>         return dict(formLogin = formLogin, loggedIn = False, ad_login_url
> =ad_login_url)
>
> Using the ad_login_url to redirect to with a button on the login page. 
> Then there's the standard microsoft register/login form that redirects to 
> the my "token" controller function referenced in the "redirect_url" at the 
> top of the pasted code. This url needs to be configured where you register 
> an azure app. 
>
> In the token controller you recieve the token which you an then use for 
> authentication - login/registration
>
> Something like this:
> def token():
>   cache = _load_cache()
>   result = _build_msal_app(cache=cache).acquire_token_by_auth_code_flow(
>     session.get("flow", {}), request.vars
>   )
>
>   user = result['id_token_claims']
>
>   if "error" in result:
>     return dict()
>
>   _save_cache(cache)
>   session["user"] = result.get("id_token_claims")
>   username = user['preferred_username']
>
> I don't know how clear this is, hopefully it's at least a little bit 
> helpful, but I'm a bit fuzzy on the details. 
> On Monday, February 6, 2023 at 6:05:52 AM UTC+1 david....@gmail.com wrote:
>
>> We do AD authentication with Shibboleth as our service provider on IIS 
>> 10.  I don't know if that would be an option.  We couldn't find anything 
>> else that worked on Windows. 
>>
>> Sent from Outlook for Android <https://aka.ms/AAb9ysg>
>> ------------------------------
>> *From:* web...@googlegroups.com <web...@googlegroups.com> on behalf of 
>> Silvian “Top 10 Answers” Cedru <silvia...@gmail.com>
>> *Sent:* Monday, February 6, 2023 4:25:40 AM
>> *To:* web2py-users <web...@googlegroups.com>
>> *Subject:* Re: [web2py] Active directory authentication 
>>  
>> Did you figure it out in the end cause I am facing the same issue right 
>> now :) 
>>
>> urban....@gmail.com schrieb am Donnerstag, 3. März 2022 um 21:31:25 
>> UTC+7:
>>
>> "Still trying to wade through the seemingly half outdated guides" 
>> I'm referring to Azure guides not Web2Py.
>>
>> On Thursday, March 3, 2022 at 2:10:33 PM UTC+1 urban....@gmail.com wrote:
>>
>> No it's not on-premise. They said so explicitly. Apologise for the low 
>> info questions. Still trying to wade through the seemingly half outdated 
>> guides. Finally got the Flask demo that MS provides to work so that I know 
>> the Azure side of things is working at least. Now have to figure out how to 
>> implement it in Web2Py. Is the ldap_auth method only for on premise AD?
>>
>> On Wednesday, March 2, 2022 at 7:24:58 PM UTC+1 nico...@gmail.com wrote:
>>
>> Hi, 
>>
>> do you really use Azure AD? Otherwise, for normal on-premise AD, see the 
>> documentation on 
>> http://web2py.com/books/default/chapter/29/09/access-control#LDAP and 
>> https://github.com/web2py/web2py/blob/master/gluon/contrib/login_methods/ldap_auth.py
>>
>> Nico
>>
>>
>> Il giorno mer 2 mar 2022 alle ore 16:48 urban....@gmail.com <
>> urban....@gmail.com> ha scritto:
>>
>> We're looking into adding AD authentication to our app. We have an active 
>> directory account and an app registered on it. 
>>
>> In the documentation I found this example of enabling AD auth:
>>
>> from gluon.contrib.login_methods.ldap_auth import ldap_auth  
>> auth.settings.login_methods.append(
>>   ldap_auth( 
>>    mode='ad', 
>>    server='https://aad.portal.azure.com/',
>>    base_dn='ou=Users,dc=domain,dc=com'
>>   )
>> )
>>
>> However I get this error when trying to login
>>
>> DEBUG:web2py.auth.ldap_auth:Traceback (most recent call last):
>>   File 
>> "C:\urban\web2py_latest\web2py\gluon\contrib\login_methods\ldap_auth.py", 
>> line 236, in ldap_auth_aux
>>     con = init_ldap()
>>   File 
>> "C:\urban\web2py_latest\web2py\gluon\contrib\login_methods\ldap_auth.py", 
>> line 630, in init_ldap
>>     "ldap://"; + ldap_server + ":" + str(ldap_port))
>>   File "C:\Python27\lib\site-packages\ldap\functions.py", line 92, in 
>> initialize
>>     uri, trace_level, trace_file, trace_stack_limit, bytes_mode, **kwargs)
>>   File "C:\Python27\lib\site-packages\ldap\ldapobject.py", line 106, in 
>> __init__
>>     self._l = 
>> ldap.functions._ldap_function_call(ldap._ldap_module_lock,_ldap.initialize,uri)
>>   File "C:\Python27\lib\site-packages\ldap\functions.py", line 55, in 
>> _ldap_function_call
>>     result = func(*args,**kwargs)
>> LDAPError: (0, 'Error')
>>
>> Am I doing anything wrong on the web2py side or is the issue in the AD 
>> configuration?
>>
>> -- 
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "web2py-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to web2py+un...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/web2py/7d013980-154b-4b94-9365-4a64f9e32423n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/web2py/7d013980-154b-4b94-9365-4a64f9e32423n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> -- 
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "web2py-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to web2py+un...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/web2py/a406d846-fdc8-4e71-aa0c-4efb8b4f1c5an%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/web2py/a406d846-fdc8-4e71-aa0c-4efb8b4f1c5an%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/2fba6e52-d826-4b2d-a0ba-387327327fe5n%40googlegroups.com.

Reply via email to