Warning… this is going to be a long one… grab a coffee, or maybe a few as I’ve tried to be as complete as possible on this one! ☕️☕️☕️
As said, time to step away from LDAP blogging for a moment. But rest assured, not for long, I still have Microsoft Azure on my to do list for the blog, and guess what… that moment I published the previous blog about Okta LDAP Interface, Jamf announced the upcoming compatibility with Google Cloud Secure LDAP… so yeah, whenever I’ll get my hands on that I’ll have to do another post on it. There is no way around LDAP it seems… 🙂
Anyway, for this post we’ll have a look at something cool, although it is still closely related to Directory and Identity services…: NoMAD Login+ Okta, soon JamfConnect…
Jump to the tech tutorial and skip the small talk here.
As you all know, Jamf acquired NoMAD from Orchard & Grove and this means that NoMAD Pro, NoMAD Login+ and PKINIT join the Jamf family and will fold into a single solution (rebranded Jamf Connect). This while the open-source version of Nomad remains open-source (with free Jamf chat support).
I have no insight in what this single solution will look like at the moment, for sure “Jamf-style cool”, but in this post I’ll just cover the NoMAD Login+ Okta, as it is today. Once the rebranded single solution is available we’ll have a look at it again. The idea behind this part of the solution will most likely remain the same I guess.
So, what is NoMAD Login+ Okta? Well, first of all, the other product, NoMAD, gives you the possibility to step away (as far as you can for your own sanity as a Mac sys admin) from binding Macs to Active Directory (see link for more details). And this while still keeping the benefits of AD binding. It’s like getting all the rewards, without doing any effort for the job…
NoMAD Login on the other hand, allows you to authenticate with AD users at the macOS login screen. Both at initial deployment as later when the Mac has been configured. Logging in with AD users on a Mac? Not that special when Macs are bound to AD, but pure magic without the bind! The power of the tool lays in the fact that endusers can use their Directory credentials, without being bound, to create a matching local user account on the Mac. And this allows you to start the initial configuration of the Mac (or user environment) with best practices (read: not binding your Macs if you don’t really need to). This makes your life as a sys admin a lot easier further down the road. Trust me!
Add NoMAD as a next step after NoMAD Login and forget about all the hassle of managing all kind of issues you might have with binding Macs to AD… keychain issues to start with!
I’ll for sure dedicate one of my next posts to NoMAD (or maybe by then it will be JamfConnect), but let’s limit it to NoMAD Login for today, and more specifically: NoMAD Login+. While NoMAD Login is made for Active Directory, NoMAD Login+ is developed to authenticate against Okta.
So this nicely fits in line with my previous post about the Okta LDAP Interface.
For those who are not using NoMAD Login+Okta yet, have a look here and download the trial if you want to take it out for a spin. The DMG you’ll download will also include the admin guide… always handy!
TutorialSo, allow me to go through the workflow I followed to deploy NoMAD Login+ Okta in my testlab:
First, aside from having an Okta account of course (get your free dev account here), we need soms users and groups in Okta. For the purpose of this tutorial I made the following users and groups:
Admin: admin@domainname, member of the groups “Admins” and “Jamf”
Standard: standard@domainname, member of the groups “Standard” and “Jamf”
No Access: na@domainname, member of the group “Jamf”
Test: test@domainname, member of the group “Jamf”
I’ll come back to why I created different users and groups later.
Creating the users:


Create the standard, admin, no access and test account as said above.
Creating the groups:


Admins, Jamf, Standard
Adding the users to the groups:

admin@domainname, member of the groups “Admins” and “Jamf”
standard@domainname, member of the groups “Standard” and “Jamf”
noaccess@domainname, member of the group “Jamf”
test@domainname, member of the group “Jamf”
Next, we need an Okta app. One app to start is enough, but I’ll come back to why I created more apps later in this post.
Create the app:





Finally you’ll have to assign users to your app. Let’s assign it to the “Jamf” group we created (with our test account as member):



Done! This Okta setup would basically be enough for a first trial run in Jamf Pro, but to make the first test deployment look a bit nicer I created a PKG in Composer with a logo and a desktop wallpaper (add a path to a folder on the hard disk where you’d like to put a copy of the files):

Upload this PKG and the NoMAD Login+ PKG to your distribution point and add to following script to Jamf Pro. The script below is a stripped version of the original script made by SRABBITT. See below for the full version.
#!/bin/bash
#NoMAD Plus / Jamf Connect Login Okta preferences file creation.
#Writes a NoMAD+ Login preferences file.
#Argument 4 Address of your Okta server. Example is dev-1234.oktapreview.com
#Argument 5 Fully qualified path to background image for CheckOkta window
#Argument 6 Fully qualified path to login logo image
#Usage: Use as a script in Jamf Pro to set the preferences file after you've installed the Jamf Connect Login package
#Rev: 1.0 — SRABBITT September 27, 2018 9:43 AM
TheURLOfYourOktaServer=$4
pathToBackgroundImage=$5
pathToLogo=$6
#AuthServer - Set the Okta domain you want to authenticate against
defaults write /Library/Preferences/menu.nomad.login.okta.plist AuthServer -string "$TheURLOfYourOktaServer"
#CreateAdminUser - Makes the new users on the machine an Admin
defaults write /Library/Preferences/menu.nomad.login.okta.plist CreateAdminUser -bool TRUE
#LoginLogo - Path to an image to use for the logo at login
defaults write /Library/Preferences/menu.nomad.login.okta.plist LoginLogo -string "$pathToLogo"
#BackgroundImage - Path to an image to use for the background of the CheckOkta mechanism.
defaults write /Library/Preferences/menu.nomad.login.okta.plist BackgroundImage -string "$pathToBackgroundImage"
The final step is creating a policy to deploy this to our test Mac. For the purpose of this post I used my DEP test device, but you could test it with any other deployment trigger. I actually used a Virtual Machine which I configured with a serial number and some other attributes to behave like my DEP test device. I’ll put a tutorial on how to achieve this on my “blog to do list”, but don’t hesitate to contact me if you’re interested in doing so. I would advice using a VM for testing to allow you to take a snapshot before deploying NoMAD Login+, allowing you to quickly revert back and do additional tests. I’m using a DEP prestage where I asked to skip the user creation and most of the Setup Assistant steps.
Note: Since macOS High Sierra you have to be careful not to skip too much if you want to keep the "Location Services" prompt. Due to the fact that Location Services, App Analytics and Siri are now combined in the "Express Setup" screen you have to leave those prompts enabled. Skipping one of those options will skip the "Express Setup" screen entirely.
Trigger: enrolment complete
Frequency: ongoing
Packages: logo/wallpaper.pkg and the NoMAD Login+ Okta pkg
Script: add the script we just created and define the variables according to your Okta server and logo/wallpaper path
Scope: add your test Mac, or scope it to a Smart Group linked to the prestage of your test device.

Let the Mac enrol and explore the Magic!
The result should be that the login screen of macOS gets replaced by your NoMAD Login screen with logo and wallpaper, and you should be able to login with one of the test users you created earlier (test@domainname).

Cool right? Try it out, and have a look at the account in the system preferences… this should be an Administrator because we added the “CreateAdminUser” preferences to our script.
Note: For one reason or another the Sign In button does not work for me, I had to hit “return/enter” for it to work… I’ll investigate that later.
Also, using a VM gave me some inconsistent behaviour. Amongst other things macOS did not honour the “skip user creation” of my prestage. Hence the “create user” screen shows up, but just ignore it, and wait… NoMAD Login+ is deploying in the background and will suddenly kick in. I tried it on a physical machine, and all worked fine. Must be a VM thing… ¯\_(ツ)_/¯
I’m not adding screenshots of the full flow where the users gets created etc as I want to take it to the next level! Just for fun!
Like I said, I created multiple Apps in Okta. So let’s delete the test app we created earlier and create 2 new apps:

Create 2 apps called “…Admins” and “…Login”. Assign the Admin App to the “Admins” group and the Login App to the “Jamf” group. No need to change anything else. The URI can be the same, and Okta will automatically create different Client ID’s. Just name and assign them differently.
Now we’ll change our script, and add a few extra settings:
Remove or comment the "CreateAdminUser" command:
#CreateAdminUser - Makes the new users on the machine an Admin
#defaults write /Library/Preferences/menu.nomad.login.okta.plist CreateAdminUser -bool TRUE
Add the following commands. You will need the Client ID's of the Login and Admin apps we created in Okta:
#OIDCAccessClientID - OIDC application to use for access to the Mac.
defaults write /Library/Preferences/menu.nomad.login.okta.plist OIDCAccessClientID -string "0oagmv3au34YraqIM0h7"
#OIDCAdminClientID - OIDC application to use to determine who is an admin when a local account is created.
defaults write /Library/Preferences/menu.nomad.login.okta.plist OIDCAdminClientID -string "0oagmp9gu63723BAY0h7"
And to use another cool feature, add a command to display a "Help Page" to your users:
#HelpURL - URL to show at the loginwindow to allow for onboarding or Okta enrollment
defaults write /Library/Preferences/menu.nomad.login.okta.plist HelpURL -string "https://www.travellingtechguy.blog"
Now, revert your test Mac to a state before you deployed NoMAD Login+ Okta earlier, and let it go through the DEP process again (or rerun the policy). Let’s have a look!








There you go! Admin and/or standard user privileges according to the Okta groups of your users!
Also, have a look at the NoMAD login screen and hit the help button…:

Note: see below on how to use this “help page” even better (see MFA).
Now, one more thing! Imagine there is a specific Mac you don’t want certain users to use. Well, you could off course change your app assignment strategy, and assign the login app to specific groups, but there is another way of achieving it by using the Sign On policies for the Login app:


By adding additional Sign On Rules you can tweak access privileges through NoMAD Login+:

Go back to your test Mac and try to authenticate with the “No Access” users… right no access 🙂
Those are just a few of the features which are available in NoMAD Login+ Okta, but have a look at the Admin Guide for all the available options to configure. Below you’ll find the full script with all the options listed. Just uncomment what you need and adjust where needed:
So, after all this awesomeness, that’s it right? Well, not yet! Let’s push it even further and see what else we can do!
Remember my previous post about the Okta LDAP Interface and MFA? What about adding MFA to this NoMAD Login+ workflow? Let’s have a look!
First we enable MFA in Okta:



! Don’t forget to exclude your LDAP service account if you are using the Okta LDAP Interface !
Now, create another NEW test user, set the temporary password, require to change it at first login, add the user to the test group “Jamf”, and try to log in with this user on the test Mac:

Because this new user did not configure MFA yet, NoMAD Login+ will ask the user to do so and show the Help page…

So, how will the enduser without access to his/her Mac be able to “Sign in to Okta to set up MFA”? Well, by pointing the “Help page” to your Okta portal in the script we deployed for NoMAD Login +.
#HelpURL - URL to show at the loginwindow to allow for onboarding or Okta enrollment
defaults write /Library/Preferences/menu.nomad.login.okta.plist HelpURL -string "https://YOUROKTAPORTALURL"
So I changed the Help page URL to my Okta portal.
You could also point it to an internal FAQ page which has the link to Okta… but to allow users to configure a Mac via DEP from wherever they are located (outside company network) using the Okta portal as Help page might be handy.









How cool is that! This actually avoids the chicken or the egg situation I mentioned in my previous post about using LDAP authentication during DEP. The only disadvantage we have with using Okta through NoMAD Login this way, is the fact that without the LDAP authentication, the devices are not automatically assigned to the users in the Jamf Pro inventory. This can however be fixed with post enrolment scripts or Jamf API tools, or maybe an idea for a feature request for JamfConnect…
Apart from using MFA, I just want to add one last thing. What if you only require the new user to change the temporary password at enrolment, without setting up/using MFA. Well no worries, just remove the “prompt for factor” in the Okta sign on policy (for the …Login app) and you would get something like this when the user signs in:

Now, that’s really it folks! Enough restoring VM snapshots madness for today. Time for ?
Have a look at the NoMAD Login+ Okta Manual for additional features like enabling Filevault, forcing an Okta login for already existing users, resetting the Login Screen to the macOS default etc…
Let me know if I missed something major, and don’t hesitate to make corrections or suggestions!
As always, if you liked this post hit the like button, tell your friends about this blog and leave a comment below!
Grtz,
TTG

Apple ecosystem enthusiast, geek, tech gadget freak, Belgian living in the Netherlands
Manager Technical Support | Jamf
Jamf connect trial grab here:
https://files.nomad.menu/Jamf-Connect-Sync-Trial.dmg
Yes, and I’ll go through a Jamf Connect Sync deployment in one of my next posts, but just remember that this is currently a different product than Nomad Login+ Okta. Nomad Login and Login+ is mainly “just in time user creation” at the login screen, while Jamf Connect Sync allows to authenticate local accounts to AD or Okta within the local user session.
Thanks for the clarification !
and Thanks for this detailed post!
I got one question, so in a world where we dont use Jamf Pro, because of slower put through of users, or just low number of users, i can set this up manually per system, not ideal, but it gets the job done.
How would i be able to force bootup login to go through NoMAD because right now, i still get prompted for the local admin login ,eventhough i granted access to the newly created Okta user in FileVault.
Secondly you refer to the manual, but thats not even near a manual, i’ve been battling multiple pages and installs and file locations to find out how to set up the system, again im not going to use Jamf Pro because of costs.
Is there anywhere besides your written blog a step-by-step to do stuff, because your script was new and made it work, but im still missing this i think need to be addressed, just not sure if it are features that arent created or arent documented.
Lastly, wouldnt it be helpful to use the session for logging in, also stay running for Okta sign in when opening the browser, no i still need NoMAD pro to again validate, eventhough just seconds before i did the same thing.
Love to chat!
Hey HenkJan, thanks for your reply! Booting through NoMAD is not on option as such, NoMAD login is only creating the local user. The fact that you are asked for the local admin users must have something to do with the new local user (created by Nomad) not correctly having Filevault rights or secure token. The secure token is however a bit all over the place, I recently saw very inconsistent behaviors when going through DEP (or as Apple changed the naming: “automated MDM enrollment”). I have to do some additional testing to see why and how. Looking at your scenario I presume you had a Mac which was already in use, installed NoMAD login+, created a user and manually added it to the FileVault users via the original local admin?
There are no additional step by step guides apart from the guide and some people in the community who blogged about it. Remember it has been open source till now, while it will remain open source, NoMAD products will be folded into JamfConnect. We’ll have to wait to see what Jamf does with it.
Regarding the session, NoMAD login and NoMAD Pro are 2 separate products. Your idea to keep the Okta login active, might be handy, but not sure if that’s possible at macOS level. I know you can force the login to authenticate through Okta, via the NoMAD login settings, even if the local account was already created…but the way NoMAD login works it is only checking against Okta not really authenticating the user in macOS. I will dive into this and see what’s actually possible.
Will let you know!
Besides this, I was just wondering, if Jamf Pro is too much for what you need, you might want to have a look at Jamf Now Plus… https://www.jamf.com/blog/jamf-now-adds-custom-ios-app-and-macos-package-deployment-in-jamf-now-plus-plan/
Thanks for this tutorial, I finally got this to work. Just one question. How do we speed up the process from after enrollment to mac login to Nomad Login. I tried adding ‘/usr/bin/killall -HUP loginwindow’ to your post script but it take at least 15 seconds to finally see the nomad login window
Thanks
Not sure if there is anything else you can do to speed it up even more at the moment, the deployment of Nomad is based on the enrollment trigger and we don’t have exact control over this trigger during the DEP process. So it still has to download the Nomad installer on the Mac. You might however be able do to something with the “await device configuration” option, currently in Jamf 10.8 beta: https://www.jamf.com/jamf-nation/discussions/29521/jamf-pro-10-8-beta-now-available
Felt it’s worth noting that at the time of writing this comment, LAPS user creation is broken in Mojave, including 10.14.1. The issue is known by JAMF/NoMAD and they’re working on it. In turn, enabling the LAPS User breaks EnableFDE. Removing any mention of LAPS from the preferences file, allows EnableFDE to work properly. Just wanted to mention that in case anyone is facing the issues I was.
Also worth mentioning that the Enable Admin with the OIDC application works well, but with that enabled, I was having a hard time letting non-admins login, even with the “Access” OIDC set. Even removing the Access item in the preferences file didn’t help. Back to the drawing board for that one.
Thanks for the guide, I got as far as getting the login screen to display, but could not log in with an Okta account, I could log in with a local account though.
I’m not sure where I went wrong as all I needed to do was provide my Okta tenant URL (unless by now the functionality does not work correctly anymore due to the product changing to Jamf Connect).
Hi!
I’m not aware of any changes which might brake it. However, I can think of 2 things:
– the Okta URL in the script parameter is without https://, just the rest of the URL
– instead of clicking sign-in, try hitting enter after putting the password in. This while still having the cursor in the password field. The sign-in button does not work for me either.
Let me know if any of this fixes it. If not, it must be one of the privilege settings discussed above.
Hi, sorry for the late reply. My trials ran out for Jamf and Okta so needed to get them restarted.
In your sample code, the first line is missing the #, maybe issues were because I copied the sample code with the missing #.
I was also having issues with the script parameters, so instead of using them, I hard-coded the Okta server and image paths into the script. Also,
Many thanks for the tutorial though!
Thanks! Good catch on the #
Added it!
Does it work now, or are you still running into issues?
It is running now, works well too.
I’m putting this together as a proof of concept to put forward to my company and this tutorial was a godsend. This takes care of authenticated login to machines (albeit by creating local accounts).
Next up is to try and determine what the other products actually do, I asked our trial provider about trialling Jamf Connect and they gave me a jamfconnect.dmg which contains the packages jamfconnectsync and jamfconnectsyncLA.
Anil
Have you tried this with pre-stage enrollment packages yet in Jamf Pro 10.9?
Would love to see a tutorial at some point
Hi Ryan!
No did not give that a try yet but that would indeed be a nice thing to do! I will have a look at it. I don’t expect any trouble in doing so.
grtz,
TTG
I’m prompted to set up MFA but once I do, it doesn’t give me the option to use it on Login.
I can set it up but can’t actually use it on the login window.
Am I doing something wrong?
Have you correctly configured the requirement for MFA in Okta? In the blogpost where I talk about: “Go to Factor enrolment and add a policy to require the use of the Okta Verify app for MFA. I renamed my existing MFA policy to “Jamf” here and assigned it to my “Jamf” group.”
So after driving myself bonkers, is it normal to have the macOS login screen (for FileVault) on reboot/startup, then once the disk is unlocked, to be prompted by the JAMF Connect login screen? So, essentially, you need to login twice? Or is something wrong with our deployment?
Hi Neil, I had a moment of confusion there as well, but I checked it. The official answer would be: “By default it will pass through the auth if the user is a valid local user, and you’ve not set DenyLocal. Login will let the OS attempt to auth the user passing the credentials provided at the FV screen.”
Are you sure the FileVault password is in sync with the local password. Are you using Nomad Pro (Jamf Connect Sync) to do so?
Do you have the DenyLocal key set?
I was confused by the Standard group. You didn’t ever assign it to an Okta app, did you?
Not really. I only had it to differentiate from
Admins. You can assign everyone to the standard access app, and the admins to the admin app. But I had the standard group to test if someone is not in any group… they should not get access to NoMAD.
Hi
I have set this up with 2 Okta apps, 1 for Admins 1 for Standard Users.
For some reason, only admins can get access, the mac blocks a standard user log in with the error message:
“You are not allowed to log in at this time.
Local users are not allowed to log in. Please contact your system administrator”
I can see in Okta the users has authenticated to the standard user app, this seems to be a mac system prompt and I can’t figure out what’s causing it.
Any idea?
Hi Joe, what’s the config file for NoMAD Login looking like? What keys have you set?
Hi,
Here is the script that does the config.
https://pastebin.com/juT9ewM3
Thanks
Joe
Thanks. Apologies for the lack of response. Things got busy. Will have a look at it again asap, if still a pending issue?
Hi,
That would be great, we can give our users the admin access in the mean time but would be grateful if we could have them as standard instead!
Thanks
Joe