Как войти под именем пользователя Active Directory в Ruby

#ruby-on-rails #active-directory #single-sign-on #ruby-on-rails-6

Вопрос:

Как я могу получить зарегистрированного пользователя рекламы в своем приложении ROR.

Я пытался:

 Etc.getlogin - It gives me the username of where the server is running
system(`WhoAmI`) - returns false
ENV["USERNAME"], ENV["USER"], ENV["USERID"] - Doesn't return anything
 

И как проверить, вошел ли Пользователь в систему или нет ?

 I am using Net::LDAP for this:

a = Net::LDAP::Filter.eq("sAMAccountName", "username")
ldap.search(:filter => a)

It return me the data of the user as :

@myhash=
{:dn=>["CN=Test Windows,CN=Users,DC=example,DC=local"],
:objectclass=>["top", "person", "organizationalPerson", "user"],
:cn=>["Test Windows"],
:sn=>["Windows"],
:givenname=>["Test"],
:distinguishedname=>["CN=Test Windows,CN=Users,DC=example,DC=local"],
:instancetype=>["4"],
:whencreated=>["20211004113850.0Z"],
:whenchanged=>["20211004124559.0Z"],
:displayname=>["Test Windows"],
:usncreated=>["16489"],
:usnchanged=>["16525"],
:name=>["Test Windows"],
:objectguid=>["Some ID"],
:useraccountcontrol=>["22038"],
:badpwdcount=>["0"],
:codepage=>["0"],
:countrycode=>["0"],
:badpasswordtime=>["0"],
:lastlogoff=>["0"],
:lastlogon=>["0"],
:pwdlastset=>["1327782117765465"],
:primarygroupid=>["213"],
:objectsid=>["Some ID"],
:accountexpires=>["9223876536854775807"],
:logoncount=>["0"],
:samaccountname=>["username"],
:samaccounttype=>["93806368"],
:userprincipalname=>["username@example.local"],
:objectcategory=>["CN=Person,CN=Schema,CN=Configuration,DC=example,DC=local"],
:dscorepropagationdata=>["16010101000000.0Z"],
:mail=>["abc@abc.com"]}>]
 

Но вот как узнать, вошел ли пользователь в систему ?

lastlogoff и lastlogon всегда «0»

Спасибо.

Ответ №1:

API MSAL должен сообщить нам имя пользователя, которое в данный момент вошло в систему, чтобы нам не нужно было создавать отдельный файл cookie и управлять этим файлом cookie и логикой.

getAllAcounts должен предоставить нам все учетные записи. getAccount должен предоставить нам учетную запись, в которую он в данный момент вошел/активен.

Вот как вы можете проверить, входит ли пользователь в систему или нет:

 cdef raw_info
    @raw_info ||= access_token.get('/me').parse
 

Затем вы можете проверить, действителен ли токен или нет. Если он действителен, то пользователь входит в систему, в противном случае-нет.