WordPress + Office 365 login


WordPress + Office 365 login allows Microsoft O365 users to seamlessly and securely log on to your corporate WordPress intranet: No username or password required. Why you need this, you may wonder. Because this way you can ensure that your corporate content such as news, documents etc. that is normally classified as „Internal“ or maybe even „Confidential“ is not available to just any pair of curious unauthenticated eyes!

Plugin Features

BASIC (free)

  • Single Sign-on for (manually registered) Office 365 / Azure AD accounts more
  • Make your WordPress (intranet) private more
  • Support for WordPress multisite more
  • Client-side solutions can request access tokens e.g. for SharePoint Online and Microsoft Graph more
  • Developers can include a simple and robust API from npm more
  • Authors can inject Pintra Framework apps into any page or post using a simple WordPress shortcode more

Now all versions include three new modern INTRANET apps

  • SharePoint Online Library more
  • SharePoint Online Search more
  • Employee Directory (Microsoft Graph / Azure AD) more


  • All features of the BASIC edition, plus …
  • Automatically register any Office 365 / Azure AD user from your tenant more


  • All features of the PLUS+ edition, plus …
  • Let users choose to login with O365 or with WordPress more
  • Require authentication for only a few pages more
  • Require authentication for all pages but not for the homepage more
  • Redirect users to a custom login error page more
  • Allow users from other Office 365 tenants to register (extranet) more
  • Allow users with a Microsoft Services Account e.g. outlook.com to register (extranet) more
  • Prevent Office 365 user from changing their WordPress password and / or email address more
  • Intercept manual login attempts for Office 365 users more
  • Sign out a user from Office 365 when signin out from your website more


  • All features of the PROFESSIONAL edition, plus …
  • (Scheduled) user synchronization from Azure AD to WordPress (per user or in batches) more
  • Update WordPress user profiles and WordPress role(s) (per user or in batches) more
  • Schedule user synchronization from Azure AD to WordPress at regular (daily or weekly) intervals more
  • Review WordPress users without a matching Azure AD account more
  • Enrich a user’s WordPress / BuddyPress profile with information from Azure AD e.g. job title, department and mobile phone more
  • Replace a user’s default WordPress avatar with a profile image downloaded from Office 365 more
  • Dynamically assign WordPress user role(s) based on Azure AD group membership(s) more
  • Deny / allow access based on a user’s Azure AD group membership(s) more
  • Place a customizable „Sign in with Microsoft“ link on a post, page or theme using a simple shortcode more


  • All features of the PREMIUM edition, plus …
  • Support for Azure AD User provisioning (SCIM) more
  • Advanced versions of the INTRANET apps that can be customized using Handlebars.js templates more
  • SharePoint Online / OneDrive Library with support for folder and breadcrumb navigation more
  • Recently used documents more
  • SharePoint Online Search with support for query templates, auto-search, templates and more
  • Employee Directory with a builtin interactive clickable org(anizational) chart incl. support for user profile images and additional fields (Microsoft Graph / Azure AD) more


  • Make sure that you have disabled caching for your Website in case your website is an intranet and access to WP Admin and all pubished pages and posts requires authentication. With caching enabled, the plugin may not work as expected
  • We have tested our plugin with WordPress 4.8.1 and PHP >= 5.6.25
  • You need to be (Office 365) Tenant Administrator to configure both Azure Active Directory and the plugin
  • You may want to consider restricting access to the otherwise publicly available wp-content directory


We will go to great length trying to support you if the plugin doesn’t work as expected. Go to our Support Page to get in touch with us. We haven’t been able to test our plugin in all endless possible WordPress configurations and versions so we are keen to hear from you and happy to learn!


We are keen to hear from you so share your feedback with us on Twitter and help us get better!

Open Source

When you’re a developer and interested in the code you should have a look at our repo over at WordPress.

Snímky obrazovky

  • Dual login feature
  • SharePoint Online Search
  • Employee Directory
  • Configure Single Sign-on (SSO, Sign in with Microsoft)
  • User registration incl. new user email Notification
  • Customize login / logout behavior
  • Use Office 365 Avatar and custom profile fields
  • User synchronization / enrollment (Azure AD)
  • Debug information
  • Scheduled user synchronization


Please refer to this post for detailed installation and configuration instructions.


19. 5. 2020
I'm not familiar with O365 logins and when I needed to set up SSO I ran into many roadblocks. I needed to enable O365 logins while still allowing local WP logins as well. I tried several other plugins without much success, particularly in the mixed authentication scenario. The Professional version of this plugin does exactly what I need and has excellent documentation that made it simple to get set up. I'll likely be trying the Intranet version at some point to integrate SharePoint as well. Kudos to the developer for producing a great integration solution that just works.
1. 5. 2020
I think this basic version is useless 1. you must create user first in wordpress, same as O365 user 2. than you can use this plugin to login
17. 1. 2020
WPO365 is a perfect plugin in every way. The price is reasonable. The capabilities are stellar. The best part is that setting it up could not have been any easier. From beginning to end, configuration took less than an hour (and I was watching a movie during the whole thing). This plugin gives me warm fuzzies knowing that Azure AD is handling our authentication. Nice job.
7. 1. 2020
Simple if you want, powerful if needed. Works great. Well-developed. Support is responsive if needed.
Přečtěte si všech 28 recenzí


WordPress + Office 365 login je otevřený software. Následující lidé přispěli k vývoji tohoto pluginu.


Plugin „WordPress + Office 365 login“ byl přeložen do 2 jazyků. Děkujeme všem překladatelům za jejich pomoc.

Přeložte “WordPress + Office 365 login” do svého jazyka.

Zajímá vás vývoj?

Prohledejte kód, podívejte se do SVN repozitáře, nebo se přihlaste k odběru protokolu vývoje pomocí RSS.

Přehled změn


  • Change: All editions of the plugin will now always show a „Sign in with Microsoft“ button on the (default) WordPress login form. Administrators, however, can choose to hide the button. See https://docs.wpo365.com/article/81-enable-dual-login for details.
  • Change: The plugin no longer rejects the ID token of a user without a valid email address. This may result in premium editions of the plugin creating WordPress users without a valid address.
  • Change: The plugin now provides 3 hooks for developers to respond when a user signs in with Microsoft, receives an access token and when the plugin analyzes reasons to skip authentication. These hooks are not enabled by default. See https://docs.wpo365.com/article/82-developer-hooks for details.
  • Improvement: The (Helpscout) Support Beacon is now loaded whenever the plugin’s configuration wizard is loaded. This makes it very easy to search the available documentation when configuring the plugin without the need to open a new browser window.
  • Improvement: A new toolbar has been added to the plugin’s configuration wizard the interacts with the (Helpscout) Support Beacon, making it really easy to contact WPO365 support.
  • Improvement: The wizard now tries to load pages from the new (but still work-in-progress) documentation service https://docs.wpo365.com.


  • Fix: The (PREMIUM and INTRANET editions of the) plugin now checks if the BuddyPress avatar is requested for a user (e.g. and not for a group).
  • Fix: The (INTRANET edition’s) Content by (SharePoint Online) Search app auto-search function did not automatically started a new search immediately after being loaded.
  • Improvement: The (INTRANET edition’s) Content by (SharePoint Online) Search app now injects a count property into the Handlebar template to make it possible e.g. to show a table header before the first row.


  • Fix: The plugin now saves the request ID variable as a GLOBAL variable.
  • Fix: A missing (global) namespace declaration in the plugin’s update checker could cause a serious error.
  • Fix: The Content by Search (SharePoint Online) and Documents (SharePoint Online / OneDrive) apps will now format dates based on the detected user’s browser (language) preference.


  • Fix: Accented characters e.g. é, è or ä would prevent the wizard from saving updated options (e.g. custom error messages, Office 365 profile field labels etc.).
  • Fix: The PLUS+ edition’s update checker was not tracking the correct item in the online store and therefore didn’t show that updates were available.


  • Fix: Usage of trailing comma’s after method parameters is not supported before PHP 7.3 and hence for older PHP versions the plugin may not load as expected (affected the INTRANET edition v10.1).
  • Fix: Usage of the PHP function get_file_contents to retrieve the WordPress gravatar for a user may cause a warning if the IT administrator had disallowed allow_url_fopen in php.ini (affected PREMIUM and INTRANET editions v10.1).
  • Fix: The table that tracks the user synchronization results was only updated with the results of the last batch (affected the PREMIUM and INTRANET editions v10.0 and higher).


  • New capability: An administrator (of the INTRANET edition of the plugin) can now configure Azure AD User provisioning by configuring the custom WPO365 SCIM endpoint for WordPress. See https://docs.wpo365.com/article/59-wordpress-user-provisioning-with-azure-ad-scim for details.
  • Improvement: The plugin now tries to detect whether the requested WordPress page is loaded inside of Microsoft Teams e.g. as Content Page of a custom built Microsoft Teams App. If this is the case, the plugin will show a „Sign in with Microsoft“ button that – when clicked – will then start the authentication workflow in a popup window that is controlled by Microsoft Teams. See https://docs.wpo365.com/article/70-adding-a-wordpress-tab-to-microsoft-teams-and-use-single-sign-on for details.
  • Improvement: Additional Office 365 fields can now be mapped to BuddyPress Extended Profile Fields.
  • Improvement: An administrator can now choose to stream the WPO365 log to a remote instance of Microsoft ApplicationInsights and by doing so benefit from the advanced search, analytics and alert functions the platform offers. See https://docs.wpo365.com/article/60-use-applicationinsights for details.
  • Improvement: When synchronizing users (with the PREMIUM and / or INTRANET edition of the plugin) an Administrator can now choose to soft-delete users which will result in soft-deleted users no longer being able to sign into the WordPress. Instead those users will see an „Account deactivated“ error message.
  • Fix: The Documents app’s breadcrumb navigation will now start with the folder name if a folder path has been provided.
  • Fix: Checked PHP 7.3 compatibility with PHP Compatibility Checker and fixed two issues.


  • New capability: An adminstrator (of the PREMIUM and INTRANET edition of the plugin) can now create a schedule to synchronize users between Azure AD and WordPress at regular (daily or weekly) intervals. Please note that doing so requires you to have configured the (App-only) Application (client) ID and corresponding secret (see https://www.wpo365.com/use-app-only-token/ and https://www.wpo365.com/app-only-application-id/ for more details about app-only permissions). Please also note that scheduled user synchronization relies on WordPress cron jobs.
  • New capability: In addition to the Employee Directory the (INTRANET edition of the plugin) now offers an advanced Contacts app that allows users to search for users, view their contact details and see their direct reports as well as their managers in the form of an interactive clickable organization chart. The app uses Handlebar templates that can be used to further customize the user experience.
  • Improvement: The Documents app (of the INTRANET edition of the plugin) can now be configured to only show the contents of a SharePoint Online / OneDrive folder. In addition it can be configured to show the „recently used“ documents of the „logged-in“ user.
  • Improvement: Most apps now offer the ability to add translations for (most of) the user interface elements (error information not always included).
  • Improvement: To optimize performance in case of the „Internet“ authentication mode, administrators can now add the following line to the wp-config.php: „define( ‚WPO_AUTH_SCENARIO‘, ‚internet‘ );“. This will prevent the plugin from loading for all requests that are not for WordPress administration pages. Please be aware that – if you add this line to your wp-config.php – you must ensure that the Redirect URI ends with „/wp-admin/“. If this is not the case, the plugin won’t be able to receive the authentication response sent by Microsoft and the plugin will not work as expected. Please also note that the following Login / Logout capabilities won’t work and must be de-activated in advance: Dual Login, Error Page.
  • Improvement: All apps have been refactored from the ground up and have been greatly simplified from a technical / maintenance point of view by utilizing Function Components combined with React Hooks and removing React Redux alltogether. Administrators are advised to test the apps before upgrading in production.
  • Fix: Previously, the plugin would overwrite the array containing a user’s (Azure AD) groups with an empty array when it tried to retrieve missing profile fields from Microsoft Graph.


  • Improvement: The plugin will now try to request data from Microsoft Graph for the current user if essential information (user principal name, email, first or last name) is not included in the initial authentication response (ID token) (PROFESSIONAL, PREMIUM and INTRANET editions only).
  • Improvement: The WordPress session will expire automatically whenever the user closes the browser. A new setting has been added (on the Single Sign-on tab of the plugin’s wizard) to remember the user.
  • Improvement: The (INTRANET edition of the) Employee Directory now includes an Org Chart template that allows users to see an employee’s manager and direct reports.
  • Improvement: You can now customize the appearance of the (INTRANET edition of the) Documents app by adding your own translations for the available columns (or choose not to show a column at all).
  • Improvement: The plugin is now capable of running a self-test sequence that validates core configuration and received ID and access tokens. Test results include hints and recommendations for improvement.
  • Improvement: The debug log now shows an ID for each request, making it easier to understand the program flow when executing multiple requests simultaneously.
  • Improvement: The (PREMIUM and INTRANET) edition of the plugin now allows storing Office 365 profile images as avatars in the wp-content folder without the need to configure a secondary App registation for app-only tokens.
  • Tested: Compatibility with WordPress 5.3.
  • Fix: PREMIUM and INTRANET edition of the plugin do not retrieve Avatar for another user when synchronizing.
  • Fix: PREMIUM and INTRANET edition of the plugin do not update extra O365 fields if that field is a boolean and changes from true to false.
  • Fix: Compatibility with PHP 7.4 (create_func deprecation).
  • Fix: By default the plugin now starts validation of the current session on WordPress‘ init hook. Administrators can, however, override this and choose to start validation earlier on the plugins_loaded hook.


  • Improvement: An administrator can now configure to save the retrieved O365 user profile images in wp-content/uploads/wpo365/profile-images (instead of in the database), helping boost performance significantly.
  • Improvement: An administrator can now configure a 2nd Azure AD App registration for so-called application permissions. Doing so eliminates the need for sensitve permissions such as Groups.Read.All and User.Read.All being granted for all users.
  • Improvement: Apps can now be customized with the help of (Handlebars.js)templates (Employee Directory, Content by Search).
  • Improvement: Using (colorful) branded icons for Office products (Content by Search).
  • Improvement: Specify the (custom Azure AD extension) properties that should return from a Microsoft Graph users query e.g. employeeId (Employee Directory).
  • Improvement: Specify to use the current user’s OneDrive as the library source instead of entering the OneDrive site address and library title (Documents).
  • Fix: IE 11 compatibility (all apps).
  • Fix: Rendering of (user profile) images in search results (Employee Directory, Content by Search).
  • Fix: Increased time-out waiting to start searching after a user entered a query (Employee Directory).


  • Improvement: An administrator can now configure the plugin to automatically assign users a WordPress role by creating one or more mappings between a (username’s login) domain on the one side and a WordPress role on the other side. Visit https://www.wpo365.com/domain-roles-mappings/.
  • Improvement: Added support for so-called Azure single sign out. Visit https://www.wpo365.com/enable-logout-without-confirmation/.
  • Improvement: An administrator can now configure a domain hint to prevent users that are already logged on toanother Azure AD / Office 365 tenant from signing in with possibly the wrong Microsoft work or school account. Visit https://www.wpo365.com/domain-hint/.
  • Improvement: The plugin, when receiving the authentication response from Microsoft, will now additionally search in WordPress for users by account name i.e. the user’s principal name (= Office 365 login name) without the domain suffix. However, please be aware that some plugin features expect a WordPress username to be a legitimate Azure AD login name. Features not working when the WordPress user name is not a fully qualified Azure AD user principal name are the Avatar synchronization, mapping of Azure AD group memberships to WordPress roles and adding additional Office 365 user profile properties to a user’s WordPress and / or BuddyPress profile as well as the deep integration in MS Graph and SharePoint Online.
  • Improvement: Some 3rd party themes and plugins that hook into the user_register action e.g. to send an email with a confirmation link, would run into a fatal error when the action was triggered. This new configuration setting (on the Miscellaneous tab) – when checked – is a work-around to disable the action from being triggered (when a new user is created automatically by the plugin). Visit https://www.wpo365.com/skip-user-register-action/.
  • Fix: Error „Undefined variable: resource Auth.php on line 774“.


  • Change: The plugin now ships with a built-in SharePoint Online Documents app (see https://www.wpo365.com/documents/).
  • Improvement: A new setting „Retrieve all group memberships“ allows you to retrieve all sorts of groups memberships when synchronizing users instead of only the security-enabled group memberships.


  • Fix: Now getting / setting WordPress transients take into account WordPress multisite to prevent „Your login has been tampered with“ error when signing into a subsite (when authentication configuration is shared between all sites in the network).


  • Improvement: Optionally you can specify your custom query when synchronizing users.
  • Improvement: Optionally you can specify a Welcome Page URL where new users are sent after they signed on with Microsoft the very first time.
  • Improvement: You can now (try to) activate your license.
  • Fix: When redirecting, the plugin now writes a proper HTML document incl. doctype.
  • Fix: The plugin now tries to obtain the initial URL the users intended to load on the client to preserve query parameters and fragments (hash).


  • Change: The plugin now ships with a built-in SharePoint Online Search app (see https://www.wpo365.com/content-by-search/).
  • Change: The plugin now ships with a built-in Employee Directory app that queries Microsoft Graph (see https://www.wpo365.com/employee-directory/).
  • Change: When using BuddyPress you can now instruct the plugin to show the Office 365 profile picture instead.
  • Fix: When synchronizing users the plugin will now also update core user fields (email, first name, last name, display name).
  • Fix: When synchronizing users the plugin will now also retrieve a user’s Office 365 profile picture (if this feature is enabled and if an older version that has not yet expired is not found).
  • Fix: If the plugin detects a different scheme between the Azure AD redirect URL and the URL the user navigated to before the SSO workflow started the plugin autocorrects the scheme (changes http:// to https://) to avoid infinite loops. An error will be generated in the log and the admin should take appropriate measures e.g. updating .htaccess to ensure the site automatically redirects to its secure version.


  • Fix: The plugin will only (try to) retrieve additional user fields (from O365) if the user signed in with Microsoft (assumption made by analyzing the email domain).
  • Fix: When the Dual Login feature is activated, the plugin now redirects the user to the WordPress site instead to initiate the login workflow.
  • Fix: A typo caused the BASIC edition to cause a warning when trying to show the discount banner.
  • Fix: When redirecting to Microsoft the plugin would sometimes not remember the state correctly, resulting in a login error.
  • Fix: Cache buster for the wizard was not set correctly and therefore wizard updates were not immediately visible after an upgrade.
  • Fix: More robust detection whether WordPress is loaded in an iframe.


  • Change: Now the plugin will no longer require access to WP REST API or WP AJAX API. Instead the plugin adds an additional POST request to trigger the Single Sign-on workflow. This request uses a cache breaker to work-around server-side cache, allowing admins to configure the home url (instead of the WP Admin url) as a Redirect URI for the Azure AD App registration.
  • Change: User synchronization no longer requires (unattended) access to the WP AJAX API. Instead the plugin will „loop“ until all users found in Microsoft Graph have been processed. For the admin starting the synchronization this will appear as a synchronous action but in reality the synchronization is executed in batches of 10 users. By doing so the synchronization will not eventually time out (but as a drawback can also not be executed unattended).


  • Fix: Removed the „too“ opinionated validation of schemes used for redirect URI and WordPress URL.
  • Fix: Improved the detection of HTTPS (but it is up to the administrator to ensure SSL is being enforced for the front and back end).
  • Fix: Removed dead code.


  • Change: Moved the custom API for users to obtain the Microsoft authentication endpoint e.g. login.microsoftonline.com to the WordPress REST API. Please ensure that this endpoint i.e. https://www.example.com/wp-json/wpo365/ is not blocked e.g. by basic auth, another plugin or your firewall.
  • Change: If the custom (WP REST) API is not available to end users (e.g. because it is disabled or blocked) the user will see an error message and instructions on how to resolve the issue are printed to the developer console (F12).
  • Change: The option to bypass the NONCE verification (at your own risk) to work around server-side cache has been re-activated. This options should only be used in combination with SSL.
  • Change: The client-side redirect script will try and detect if it’s being loaded in an iframe (which is by default not supported by Microsoft) and if this is the case it will try and open a popup instead. Please make sure popup blockers are disable for your domain, if you are trying to place your website in an iframe. For Internet Explorer / Edge please make sure that login.microsoftonline.com and your website are both added to the same security zone.
  • Change: Logging has been improved with a filter to only show errors and error descriptions now offer more guidance on how they can be resolved.
  • Fix: When WordPress multisite has been installed, the plugin will detect when the user changes the (sub) site (when the admin configured WPO_MU_USE_SUBSITE_OPTIONS (true)) and if this is the case signs out the user and eventually redirects the user to Microsoft to authenticate for the new (sub) site.


  • Fix: WPO365 admin menu not available when WPO_MU_USE_SUBSITE_OPTIONS (true) has been configured.
  • Fix: O365 user fields now requested using the user’s principal name (upn) instead of email address.


  • Fix: Compatibility with older browsers, specifically IE11.
  • Fix: Added a plugcache breaker when loading pintra-redirectjs.


  • Change: To work-around server-side caching the previous solution to redirect via /wp-admin has been discontinued. Instead the plugin will now output a short (cachable) JavaScript that will request the authentication URL from a custom WordPress AJAX service and redirect the user accordingly.
  • Change: The way nonces are generated and validated has been changed to ensure that nonces are really used only once.
  • Change: A version 2 of the „Sign-in with Microsoft“ shortcode has been added to take advantage of the beforementioned client-side redirection to prevent server-side caching. Older „Sign-in with Microsoft“ shortcode templates will continue to work but it is recommended that they are updated accordingly.
  • Change: A version 2 of the „Dual Login“ feature (= previously referred to as „Redirect to login“) has been added to take advantage of the beforementioned client-side redirection to prevent server-side caching. Older Dual Login templates will continue to work but it is recommended that they are updated accordingly.
  • Change: The plugin now requires that the Azure AD „Redirect URI“ and your WordPress (Site) Address use the same scheme e.g. http(s). If this is not the case it will show a „Plugin is not configured“ error and will basically disable it self, to prevent infinite loops.
  • Change: Debug log will now show the debug in descending order (latest entries first).
  • Change: The plugin will now try and automatically add a trailing slash whenever it tries to redirect the user.
  • Change: When using the „Dual Login“ feature (= previously referred to as Redirect to login) the plugin will now remember the URL the user initially requested and redirect the user accordingly upon successful authentication.
  • Change: The plugin’s wizard „Test authentication“ button has been removed. Instead the configuration is always saved and then tested. The authentication URL used for testing will now appear after clicking „Save configuration“ since this URL (and the corresponding nonce) is generated server-side and must be unique.
  • Fix: A legacy function to prevent client-side caching that generated unnecessary error log entries (and thus unnecessary warnings in WP admin) has been removed.


  • Change: The plugin will regularly check the error log to see if recently new errors were logged and if so show a dismissable notice in the WordPress admin area.
  • Change: The administrator can choose to surpress the error notice in the WordPress admin area.
  • Fix: Improved the improved way of parsing the ID token (trying to get the user principal name first if available).
  • Fix: The plugin would throw an previously uncaught exception when trying to log an event when the synchronization of users would fail.


  • Change: Now that Microsoft has made the new Azure App registration portal General Available, the recommended Azure AD endpoint to use is v2.0 (see https://www.wpo365.com/azure-application-registration/)
  • Change: The plugin now supports retrieving manager data (display name, email, telephone number(s), office location, country) of an O365 user through Microsoft Graph.
  • Change: When configuring „Redirect to login“ you can now choose to hide the SSO link which is otherwise shown above the login form.
  • Change: You can now configure a custom login URL (which is automatically added to the Pages Blacklist).
  • Fix: Improved way of parsing the ID token, avoiding unexpected WP user names, especially for Azure AD guests and users from other tenants.
  • Fix: Display name property now correctly set when creating a new WP user using the information from the parsed ID token.
  • Fix: Now the plugin will check – when multisite is activated – whether the logged in user autenticated for the current site and if not the user will be logged out and forced to authenticate again.
  • Fix: WP user now created with a stronger default password.


  • Fix: Improved caching of license check result to prevent it from impacting the overall website performance.
  • Fix: Now the wizard is loaded with a cache breaker to ensure with each new plugin version the latest version shows immediately.
  • Fix: White spaces at the beginning and end of configuration options that are strings are now properly trimmed.


  • Change: Added software licensing and replaced automated upgrade with license key based solution (professional and premium version).
  • Fix: Additional logging when synchronizing user (premium version).


  • Change: Added an extra option (see Miscellaneous tab of the plugin’s configuration wizard) to prevent the wp-login hook from being fired as it may cause an error in combination with some 3rd party themes.
  • Fix: The plugin now recognize the super administrator (available only for WordPress multisite) as an administrator of (any) subsite.


  • Fix: The plugin now checks whether a user is an administrator by verifying roles instead of capabilities.
  • Fix: The plugin’s URL cache now resolves the WordPress home URL instead of the site address for the website’s front end home.
  • Fix: The plugin now correctly recognizes a „bounced“ request when preparing to redirect the user to Microsoft’s authentication endpoint.


  • Change: The plugin can be configured to skip authentication when requesting data from the WordPress REST API when a Basic authentication header is present (professional and premium editions only).
  • Change: You can configure the plugin to skip nonce verification (however, it is not recommended to do so but instead find the root cause e.g. an aggressive server-side caching strategy).
  • Change: User synchronization is now supported at the level of a (sub) site in a WordPress Multisite WPMU network (premium edition only).
  • Change: User synchronization now checks user capabilities and won’t delete users that have the administrator capability (premium edition only).
  • Fix: Check for admin capabilities would not always return true for a WordPress Multisite WPMU Network.
  • Fix: Due to a regression the number of user synced per batch was set to 1 instead of 10 (premium edition only).
  • Fix: Manual login attempts will now be intercepted even when redirect to login is checked (professional and premium editions only).


  • Change: User Synchronization is now executed in asynchronous batches of 25 users each until finished to prevent a timeout exception. As soon as the asynchronous user synchronization has finished the plugin will (try and) send an email to website’s administrator (premium version only).
  • Change: When you have selected the Intranet (Authentication) Scenario, you can check the „Public Homepage“ option to allow anonymous access to the WordPress frontpage i.e. your website’s home page (premium and professional version only).
  • Change: A direct link to the WPO365 Wizard has been added to the Admin Dashboard Menu.
  • Change: You can now toggle debug mode comfortably from the „Debug“ tab that has been added to the plugin’s configuration wizard. The debug log can now be viewed on that tab as well and you can copy the log to the clipboard.
  • Change: The plugin now partially obscures a number of configuration secrets e.g. application ID, application secret, nonce etc.
  • Change: The plugin’s wizard has been enhanced with a number of warnings in the form of popups to provide more guidance when configuring the plugin.
  • Fix: Synchronizing external users has been improved and the user name configured by the plugin is the external user’s own email address (instead of the – sanitized – Azure AD User Principal Name) (premium version only).
  • Fix: When a user – for any reason – cannot be created, the plugin would try and log that user’s ID, causing an irrecoverable exception, which is now caught and logged adequately.


  • Fix: Stricter validation of the Error Page URL and Pages Blacklist entries to ensure that the website is not accidently added (causing the plugin to skip authentication alltogether).
  • Fix: Automatic update for the PROFESSIONAL edition failed.


  • Fix: Custom error messages were ignored due to an error with the property’s casing.
  • Change: The professional and premium version now offer a „Redirect to login“ option that when checked will send the user to the default WordPress login form (instead of the Microsoft) and on the login form a message will inform the user that he / she can also sign into the website using his / her Microsoft Office 365 / Azure AD account (and provide a link that when clicked will sign in the user with Microsoft)


  • Fix: Auto-fix for bypassing server-side cache dind’t work as expected.
  • Change: The BASIC edition will now show an appropriate error message when user not found.
  • Change: Added a short code that can be used on a custom error page to display the plugin’s error message (professional / premium only).


  • Fix: Removed „Plugin not configured“ error redirection which prevented users to logon with their WordPress-only admin account when then plugin was not yet configured.
  • Fix: (Smoke) Tested against PHP 7.3.3 and replaced deprecated create_function call.


  • Change: When you change the authentication scenario to „Internet“ the Pages Blacklist will be replaced by a Private Pages list. Posts and Pages added to the new Private Pages list will only be accessible for authenticated users. If the user is authenticated, the plugin will try and sign in the user with Microsoft.
  • Change: You can now configure an Error Page. When configured, the plugin will redirect the user to this page each time it runs into an error e.g. user not found, plugin not configured etc. If no Error Page is configured, the plugin will instead redirect the user to the default WordPress login form. The plugin will automatically skip the Error Page when authenticate a request (to avoid an infinite loop). The error code will be sent along as query string parameter and can be used to customize your own Error Page.
  • Fix: Added MIME Type and Content Headers to the New User Notification email template.


  • Change: Sending a customized new user registration email is not supported by the basis (free) version. See online documentation for details.


  • Fix: If a user is not manually registered prior to trying to sign into the WordPress site with Microsoft, the user would end up in an infinite loop (only impacts basic version).
  • Fix: Remove crossorigin from Pintra Fx template since this was causing an issue downloading react files from UNPKG CDN.


  • Fix: A new setting „Don’t try bypass (server side) cache“ on the Miscellaneous Tab now controls whether the plugin will try and bypass the server side cache by redirecting the user first to /wp-admin before redirecting the user to Microsoft’s Identity Provider.
  • Fix: A new global constant WPO_MU_USE_SUBSITE_OPTIONS allows administrators of a WordPress multisite network to toggle between a „shared“ scenario in which all subsites in the network share the same Azure AD application registration and a „dedicated“ scenario in which all sites in the network will have to be configured individually.


  • Fix: Missing namespace import causing server error when user cannot be added successfully [professional, premium]


  • Change: Now the plugin can redirect users based on their Azure AD Group Membership [premium]
  • Fix: User synchronization would not work correctly with Graph Version set to beta
  • Fix: Added support for wp_login hook
  • Fix: Lowered priority when hooking into the wp_authenticate hook


  • Plugin options are now managed through a new Wizard app that can be opened from the WordPress Plugins page where a new action link has been added to the wpo365-login plugin
  • Support for configuring options through wp-config.php and Redux Platform has been discontinued (existing options will be upgraded automatically)
  • Harmonized version number across all versions


  • Change: Removed the (Redux) WPO365 Option for scope
  • Change: Support for Azure AD v2.0 authentication and access token requests (preview, more information will follow in a separate upcoming post)
  • Change: Updated the access token (AJAX) service API to support Azure AD v2.0 scope based token requests
  • Change: Authorization, access and refresh codes and tokens are now stored as JSON encoded classes
  • Change: Previously deprecated methods have been removed (other / third party plugins and apps must integrate using the API now)


  • Change: A configuration option has been added to always redirect a user to a designated page upon signin into the website
  • Change: A client (side) application can now request an oauth access token for any Azure AD secured resource e.g. Graph and SharePoint Online
  • Change: A configuration section has been added to configure / disable the aforementioned AJAX service for Azure AD oauth access tokens
  • Change: A Configuration section has been added that allows administrators to define custom login error messages
  • Change: Refresh tokens e.g. for Graph and SharePoint Online are now set to expire after 14 days
  • Change: The plugin will now cache the Microsoft signin keys used to verify the incoming ID token for 6 hours to improve overall performance
  • Change: The flow to obtain access tokens has been refactored and greatly simplied (existing methods have been marked deprecated)
  • Fix: Dynamic role assignment will not add default role when user has existing role(s)


  • Change: Pages Blacklist can now include query string parts e.g. „?api=“ but administrators need to be aware that this can potentially weaken overall security read more


  • Fix: user_nicename – a WP_User field that is limited to 50 characters – was wrongly set to a user’s full name which under circumstances prevented a user from being created successfully


  • Fix: When searching for O365 users search both in email and login name
  • Fix: Check before redirecting whether headers are sent and if yes falls back to an alternative method to redirect
  • Fix: search_columns argument for WP_User_Query must be an array


  • Moved the JWT class into the Wpo namespace (to avoid class loading issues)
  • Added psr-4 type auto class loading
  • Code refactoring to allow for tighter integration e.g. with SharePoint Online Plugin