<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>samueld</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/samueld/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/samueld/feed.xml</link>
    <description />
    <lastBuildDate>Mon, 21 Jan 2019 16:36:29 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Choose the right sign-in option to connect to Azure AD &amp; Office 365</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/choosing-the-right-sign-in-option-to-connect-to-azure-ad-office-365</link>
      <pubDate>Tue, 13 Jun 2017 18:56:05 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/?p=165</guid>
      <description><![CDATA[Howdy folks!

Azure AD connects organization of all sizes to Office 365 and other SaaS...]]></description>
      <content:encoded><![CDATA[Howdy folks!

Azure AD connects organization of all sizes to Office 365 and other SaaS applications in a seamless and secure manner. A good deal of our customers synchronize their identities from an on-premises Active Directory. For these customers, signing in with their existing work credentials is the recommended and most common approach. In this case Azure AD provides multiple ways to sign-in to meet the broad needs of our customers. These are broadly classified as
<ol>
 	<li><strong>Password # Sync (P#S):</strong> With this option, password hashes (actually a derivative with 'salt') are synced to Azure AD allowing users to sign-in with the same password as they used with their on-premises Active Directory. Do note that the hashes stored in Active Directory cannot be used to login into your on-premises environment. This is the simplest option with the least infrastructure foot print. You can learn more about password hash synchronization <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnectsync-implement-password-synchronization">here</a>.</li>
 	<li><strong>Active Directory Federation Service (ADFS):</strong> Federating your sign-in with ADFS allows the sign-in to be delegated to an on-premises server that validates your credential and sends a security assertion back to Azure AD. In this model, Azure AD never sees any credential associated with their on-premises Active Directory. Additionally, ADFS provides desktop SSO for your corporate domain joined devices. You can learn more about ADFS <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/whats-new-active-directory-federation-services-windows-server-2016">here</a> and integration with Azure AD Connect <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnectfed-whatis">here</a>. For those of you concerned with on-premises data center outages, we recommend that you keep a site available in Azure that you can swap your DNS to or also password # sync at the same time and use that if your on-premises data center goes down. ADFS is the #1 federation provider for Azure AD and accounts for nearly 45% of all Azure AD logins (as of May '17).</li>
 	<li><strong>3<sup>rd</sup> party Federation Service:</strong> This is similar to the model for ADFS where a customer uses 3<sup>rd</sup> party federation products or services to perform the sign-in. Examples of 3<sup>rd</sup> party federation services are Ping Federate and Shibboleth. If the 3<sup>rd</sup> party federation uses WS-* (recommended) to perform the sign-in the product and the version must be certified to be used. The certified list is available <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-federation-compatibility">here</a>. Protocol requirements for SAML protocol vendors connecting to Azure AD is listed <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-federation-saml-idp">here</a>.</li>
 	<li><strong>Pass Through Authentication (PTA):</strong> PTA allows you to enter your credentials on the Azure AD sign-in page which is then tunneled securely to an on-premises connector to validate against your Active Directory. While the credential is entered on an Azure AD page, it is never stored or saved in any form. You can learn more about PTA <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-pass-through-authentication">here</a>.</li>
</ol>
Additionally, <strong>Azure AD Seamless SSO </strong>is a configuration step (no agent involved) via Azure AD Connect that can be combined with Password Sync or Pass Through Authentication. This allows you to seamlessly sign-in from your domain joined devices inside your network. You can learn more about this <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-sso">here</a>.

As you can see there are quite a few choices. These choices offer our customers the flexibility to choose the right option based on simplicity, need and feature richness. This blog post focuses on providing sufficient details and clarity to help you make the right choice.

Ps: I will not be focusing on 3<sup>rd</sup> party Federation Service. If you are interested in that please check with your vendor.
<h1>A Few Simple rules…</h1>
Before we start analyzing all the bells and whistles of choosing the right option, here are a few simple rules to make a choice.
<ol>
 	<li>If you don’t have ADFS or an existing 3<sup>rd</sup> party federation service..
<ul>
 	<li>Use Password # Sync. It is the simplest option for customers and has the lowest infrastructure needs.</li>
 	<li>If for some reason the policy in your organization does not allow Password # Sync and only needs desktop SSO for domain joined devices, strongly evaluate using PTA as an option. PTA does not require any deployment in the DMZ which simplifies the deployment infrastructure when compared with ADFS. Of note, we recently (@Ignite 2017) announced that F5 can now fully replace the ADFS proxy capabilities for the DMZ. So, if you have an F5 device already, the difference between ADFS and PTA diminish significantly.</li>
 	<li>Use ADFS if you need specific capabilities that the prior options do not offer. See table below for more info.</li>
</ul>
</li>
 	<li>If you already have ADFS for other applications, continue to use it. It is recommended not to split out your IDP’s where possible so that end users can have a consistent sign-in experience. We recommend moving your applications over to Azure AD for additional security controls such as Identity protection based on risk, device based conditional access across web apps and native clients and provisioning support for specific SaaS apps. You can still enable P#S for your users that provide additional benefits such as leaked credential detection and as a fall back mechanism if your datacenter/ADFS goes down. You can then consider other options such as P#S or PTA based on your needs.</li>
 	<li>If you have a 3<sup>rd</sup> party federation service and it only supports SAML-P, evaluate ADFS as there are # of use cases that do not work when the IDP only supports SAML-P. We’ve seen many customers go down this route as many use cases when connecting to Azure AD require WS-Trust. The most common ones are AAD SSO &amp; Conditional Access from Win10 devices when logging in with U/P and EAS support. A common patterns employed by customers is to redirect all passive browser-based flows to the 3rd party IDP, but handle all active flows (WS-Trust) directly via ADFS. This provides a consistent sign-in experience.</li>
 	<li>If you have a 3<sup>rd</sup> party federation service that supports WS-*, ensure that the product and version is part of the “Works with Azure AD” <a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-federation-compatibility">list</a>. If this is not present, I would evaluate one of the existing MSFT options. If it's present do check with your vendor against the cases that I listed below.</li>
 	<li>If you have Azure AD premium licenses for all your active users in the cloud, you should seriously consider using PHS or PTA as you will have all the security capabilities available via Azure AD (e.g. Conditional Access). If not, I'd recommend you consider the options below, especially the ones called out as premium below to make an informed evaluation.</li>
</ol>
Simple isn’t it…Also, it is easy to change the sign-in options at a later time through Azure AD Connect (<a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-user-signin#changing-the-user-sign-in-method">link</a>). So, don't sweat it too much if you are making a choice initially and then change your mind later.

However, a lot of you IT folks want to review the details while making this choice. So, let’s chat about some of the specifics across the options that Microsoft provides.
<h1>Comparing the Sign-in Options</h1>
For this exercise, I am always going to combine Azure AD Seamless SSO configuration with P#S and PTA. Also, if any capability requires Azure AD premium, I’ve tagged this as well.
<table width="800" border="1">
<tbody>
<tr>
<td width="222" align="center"><strong>Option</strong></td>
<td width="138" align="center"><strong>P#S + DSSO agent</strong></td>
<td width="144" align="center"><strong>PTA + DSSO agent</strong></td>
<td width="120" align="center"><strong>ADFS</strong></td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>INFRASTRUCTURE &amp; OPERATIONS</strong></td>
</tr>
<tr>
<td width="222"><strong># of Servers</strong></td>
<td width="138" align="center">1

Rec: 2 (+'Staging' server)</td>
<td width="144" align="center">Min: 1

Rec: 2 for HA</td>
<td width="120" align="center">Min: 1

Rec: 2 for HA</td>
</tr>
<tr>
<td width="222"><strong>Requires DMZ deployment for Extranet Access</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES

Min:1, Rec: 2 for HA</td>
</tr>
<tr>
<td width="222"><strong>Provides HA options with auto-failover</strong>

<span style="color: #ff0000"><em>See note 1</em></span></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Requires SSL certificate</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>SCOM support to monitor on-premises components</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Cloud Service to monitor on-premises components</strong></td>
<td width="138" align="center">Connect Health

(Premium)</td>
<td width="144" align="center">Partial</td>
<td width="120" align="center">Connect Health

(Premium)</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>AUTHENTICATION</strong></td>
</tr>
<tr>
<td width="222"><strong>AD - Password Sign-in</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Desktop SSO</strong></td>
<td width="138" align="center">YES

(No EDGE support)</td>
<td width="144" align="center">YES

(NO EDGE support)</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Soft Certificates (MDM or GPO provisioned)</strong>

<span style="color: #ff0000"><em>See note 2</em></span></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Smart Card </strong>

<span style="color: #ff0000"><em>See note 2</em></span></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Fail Auth if user is disabled</strong></td>
<td width="138" align="center">Partial. Typically up to 30 mts for sync cycle to complete</td>
<td width="144" align="center">Immediate</td>
<td width="120" align="center">Immediate</td>
</tr>
<tr>
<td width="222"><strong>AD - Fail Auth if user's account in AD has been locked out</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Fail Auth if user’s password has expired</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Supports users in multiple trusted AD forests</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>AD - Supports users in multiple untrusted AD forests</strong>

<span style="color: #ff0000"><em>See note 3</em></span></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES (2016+)</td>
</tr>
<tr>
<td width="222"><strong>Users in single AD forest to multiple AAD tenants</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>3<sup>rd</sup> party LDAP - Password sign-in</strong>

<span style="color: #ff0000"><em>See note 4</em></span></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES (2016+)

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-to-authenticate-users-stored-in-ldap-directories">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>Authenticator App as primary Sign-in <em>(password less)</em></strong></td>
<td width="138" align="center">In Preview</td>
<td width="144" align="center">In Preview</td>
<td width="120" align="center">YES (2016+)

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-2016-and-azure-mfa">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>3rd party Auth Provider as primary Sign-in <em>(password less)</em></strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES (2019+)

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-2016-and-azure-mfa">link</a>)</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>MFA</strong></td>
</tr>
<tr>
<td width="222"><strong>Azure MFA (SMS, Phone, TOTP)</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES (2016+)</td>
</tr>
<tr>
<td width="222"><strong>Azure MFA Server (+Pin &amp; Hardware token support)</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Win10 Hello For Business (Key trust)</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES (2016+)</td>
</tr>
<tr>
<td width="222"><strong>Win10 Hello For Business (Cert trust)</strong>

<span style="color: #ff0000"><em>See note 5</em></span></td>
<td width="138" align="center">YES<span> </span><span>(w/ </span><span>Intune)</span></td>
<td width="144" align="center">YES (w/ Intune)</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>3<sup>rd</sup> party MFA</strong>

<span style="color: #ff0000"><em>See note 6</em></span></td>
<td width="138" align="center">Yes

(Premium 1)</td>
<td width="144" align="center">Yes

(Premium 1)</td>
<td width="120" align="center">YES

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-additional-authentication-methods-for-ad-fs">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>Build Custom MFA</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-additional-authentication-methods-for-ad-fs">link</a>)</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>APPLICATIONS</strong></td>
</tr>
<tr>
<td width="222"><strong>Browser</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Exchange Active Sync (EAS)</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Native apps (legacy auth)</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Native apps (modern auth)</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES

(except for Skype For Business)</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Win 10 desktop sign-in with U/P on a AAD joined device</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Azure SQL with AD Integrated Authentication</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES
(<a href="https://blogs.technet.microsoft.com/pauljones/2016/02/08/how-to-setup-azure-sql-integrated-authentication/">link</a>)</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>SIGN-IN EXPERIENCE</strong></td>
</tr>
<tr>
<td width="222"><strong>Customize logo, image and sign-in description</strong></td>
<td width="138" align="center">YES (premium)

(<a href="https://docs.microsoft.com/en-us/azure/active-directory/active-directory-branding-custom-signon-azure-portal">link</a>)</td>
<td width="144" align="center">YES (premium)

(<a href="https://docs.microsoft.com/en-us/azure/active-directory/active-directory-branding-custom-signon-azure-portal">link</a>)</td>
<td width="120" align="center">YES

(<a href="https://docs.microsoft.com/en-us/azure/active-directory/connect/active-directory-aadconnect-federation-management#customlogo">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>Customize full layout with CSS customization</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/custom-web-themes-in-ad-fs">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>Customize dynamically with Java Script</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/advanced-customization-of-ad-fs-sign-in-pages">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>Sign In with UPN</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Sign In with Domain\samaccountname</strong>

<span style="color: #ff0000"><em>See note 7</em></span></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Seamless first time sign-in to O365 native apps on Domain Joined devices inside corp network (includes Office Pro Activation)</strong>

<span style="color: #ff0000"><em>See note 8</em></span></td>
<td width="138" align="center">Coming Soon</td>
<td width="144" align="center">Coming Soon</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Seamless 2<sup>nd</sup> time sign-in to O365 native apps on Domain Joined devices</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>PASSWORD EXPIRY NOTIFICATION &amp; CHANGE</strong></td>
</tr>
<tr>
<td width="222"><strong>Supports password expiry notification in Office Portal &amp; Win10 desktop</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Custom password change URL link shown in Office Portal &amp; Win10 desktop</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Integrated password change experience when user’s password has expired</strong></td>
<td width="138" align="center">NO</td>
<td width="144" align="center">NO</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>DEVICES &amp; ACCESS CONTROL</strong></td>
</tr>
<tr>
<td width="222"><strong>Device Registration: Win10 DJ</strong></td>
<td width="138" align="center">YES

Alternate ID is not supported</td>
<td width="144" align="center">YES

Alternate ID is not supported</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Device Registration: Win7/8.1 DJ</strong></td>
<td width="138" align="center">YES</td>
<td width="144" align="center">YES</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="222"><strong>Block legacy protocols</strong></td>
<td width="138" align="center">Public Preview (Premium)</td>
<td width="144" align="center">Public Preview (Premium)</td>
<td width="120" align="center">YES

(<a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/access-control-policies-w2k12">link</a>)</td>
</tr>
<tr>
<td width="222"><strong>Allow legacy protocols only from intranet (e.g. Office 2010)</strong></td>
<td width="138" align="center">Coming Soon

(Premium)</td>
<td width="144" align="center">Coming Soon

(Premium)</td>
<td width="120" align="center">YES</td>
</tr>
<tr>
<td width="623" align="center" colspan="4"><strong>OTHER</strong></td>
</tr>
<tr>
<td width="222"><strong>Protect U/P logins against leaked credentials</strong></td>
<td width="138" align="center">YES

(requires enabling p/w sync)</td>
<td width="144" align="center">YES

(requires enabling p/w sync)</td>
<td width="120" align="center">YES

(requires enabling p/w sync)</td>
</tr>
</tbody>
</table>
&nbsp;

Additionally, if you are building claims aware LOB apps that require all communication &amp; data to be inside your on-premises network, you would swing towards the ADFS side.
<h2>Notes</h2>
<ol>
 	<li><strong>HA with auto-failover:</strong> In the case of PTA, this is automatically done by the cloud service. In the case of ADFS, the load balancer can be configured to send requests only to ‘healthy’ nodes. With password # sync, you will have to manually elevate the staging Azure AD Connect server to become active if the current server goes down.</li>
 	<li><strong>Certificate sign-in:</strong> ADFS can integrate with your enterprise PKI to allow sign-in using certificates. These certificates can be soft-certificates deployed via trusted provisioning channels such as MDM or GPO or smartcard certificates (including PIV/CAC cards) or Hello for Business (cert-trust). See <a href="https://blogs.msdn.microsoft.com/samueld/2016/07/19/adfs-certauth-aad-o365/">this blog</a> for more information.</li>
 	<li><strong>Users in multiple untrusted AD forests:</strong> With ADFS in 2016, an untrusted forest can be configured as an LDAP directory that allows you to sign-in those users from a single ADFS setup. To learn more about LDAP directory setup with ADFS, see this <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-to-authenticate-users-stored-in-ldap-directories">link</a>.</li>
 	<li><strong>3<sup>rd</sup> party LDAP directory:</strong> Customers requiring to sign-in users from a 3<sup>rd</sup> party LDAP directory to access Azure AD apps (and Office 365) can now use a new feature in ADFS 2016 to sign these users in. To learn more about this feature and configure it, see <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/configure-ad-fs-to-authenticate-users-stored-in-ldap-directories">this link</a>.</li>
 	<li><strong>Win10 Hello For Business (Cert Trust):</strong> For customers looking to deploy Hello For Business as part of their Win10 deployment, this option is only relevant if you need the TPM protected credentials to be used with down-level domain controllers (&lt;2016 DC’s) or with VPNs that only support certificates. Otherwise, the key trust model can be used. Also, in this option, ADFS 2016 also becomes the provisioning endpoint for the TPM protected certificates and makes the provisioning simpler with auto-renewal &amp; instant PIN use (coming soon). It is also possible to use MDM to provision the certificates. For Hybrid Azure AD Joined devices (domain joined devices that are also registered with Azure AD), the ADFS option is recommended due to the more seamless and deterministic experience that is integrated with Windows logon.</li>
 	<li><strong>Custom MFA: </strong>Azure AD recently announced support for 3rd party MFA providers integrated with Conditional Access. This is currently in preview and supports RSA, Trusona &amp; Duo. To learn more see <a href="https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access-controls#custom-controls">this link</a>.</li>
 	<li><strong>Sign-in with domain\samaccountname:</strong> While ADFS supports this and can be used in multiple use cases, we recommend customers to move to signing in with a UPN suffix. Also, it is possible in ADFS in a single UPN suffix scenario to customize the Java Script in the sign-in pages to only require the samaccountname.</li>
 	<li><strong>Office first time login on DJ devices:</strong> Office apps are optimized on first sign-in to look up the local UPN and seamlessly sign-in the user using WS-Trust Kerberos endpoints from the Identity provider. If this is not available, Office throws up a dialog where the user must enter their UPN in the Azure AD home realm discovery page which then redirects to the IDP and can support desktop SSO. This capability is likely needed if you are planning on exposing Office apps through a Virtual Desktop Solution that is not using persistent sessions. In this case, each login is treated like a first time login.</li>
</ol>
<h1>What about 3rd party Identity Providers?</h1>
I've had a lot of folks ask me about 3rd party Identity providers (IDP). In general, these are the things that you should watch out for.

While Azure AD does support SAML protocol with the IDP, there are a few use cases that do not work with SAML IDP's and require the IDP to support WS-Trust.
<ul>
 	<li><strong>Acquisition of Primary Refresh Token</strong> (PRT, think of this <strong>like</strong> an internet compatible kerb TGT) when a user logs into an Azure AD Joined or a Hybrid Azure AD Joined device. This is because the Windows client uses WS-Trust to talk to the IDP and get a token for the user which is then used to translate to a PRT. Failure to PRT will manifest in the following issues.
<ul>
 	<li>Users<strong> fail to login</strong> into an Azure AD Joined device with a password</li>
 	<li>Users manage to login into a Hybrid Azure AD Joined device but<strong> do not get Single Sign On</strong> to applications</li>
 	<li>Users manage to login into a Hybrid Azure AD Joined device but <strong>fail to access applications</strong> protected with <strong>device based</strong> Conditional Access controls. This is because the PRT also contains the device information that is used to validate against a device based CA policy.</li>
</ul>
</li>
 	<li><strong>Windows Hello For Business (Cert Trust)</strong> is only supported with ADFS for federated customers. This is because there is tight integration between the windows client to trigger and provision the WHFB Certificate for the users. ADFS (2016+) acts as registration authority for the TPM protected certificates and integrates with a customer's enterprise PKI system. Note that you may not need Cert Trust deployment of Windows Hello For business and can use the Key based deployment. For this, you will need to ensure that you have moved your domain controllers for user account forests up to Windows Server 2016 or higher. Additionally, you will need to ensure that you have an adequate solution that works using an alternate form of credentials.</li>
</ul>
There are other use cases that use WS-Trust. These cases tend to be optimizations and not necessarily blockers.
<ul>
 	<li><strong>Instant registration for Hybrid Azure AD Joined devices for federated customers:</strong> The client attempts to register the device post reboot on a domain joined device. If the customer is federated, it optimistically attempts to register the device as the computer account using WS-Trust kerberos endpoint. Subsequently, the sync mechanism (via AAD Connect) keeps this consistent with Azure AD. If the instant registration fails, it falls back to the sync mechanism registering in the cloud, but with a delay (typically 30 minutes). This fall back mechanism is only available if you are on Windows OS build 1803 or higher.  If you are considering Hybrid Azure AD Join with VDI sessions, I'd strongly recommend using an IDP that supports WS-Trust (like ADFS), other wise the delay will impact end user sessions.</li>
 	<li><strong>First time SSO to Office apps on domain joined machines:</strong> When Office apps run the first time on a domain joined machine (including Office Pro Plus activation), it checks for the local logged in UPN and attempts to use WS-Trust kerberos authentication to seamlessly sign-in the user with no user interaction. If this optimization fails, Office will prompt a dialog where the user will be asked to minimally enter their UPN on the Azure AD sign-in page so that Azure AD can then redirect to the appropriate IDP.</li>
 	<li><strong>Legacy Mail Authentication:</strong> All legacy mail clients (Outlook 2010 or lower) use HTTP basic authentication to Exchange Online (EXO). Here EXO proxies this back to the federated IDP via WS-Trust. This also includes any mobile clients that uses EAS protocol. The only exception is on latest versions of iOS where the EAS client uses modern authentication (with OAuth) to sign-in the user. Legacy authentication is generally considered a security risk as it exposes password authentication API's to the extranet. It is recommended to move all Office clients over to modern authentication patterns that provide better security.</li>
</ul>
Additionally, there are certain other use cases that you should evaluate your IDP for. These may be blockers for your organization depending on the use case. These are:
<ul>
 	<li><strong>3rd party MFA support integrated with Azure AD Conditional Access:</strong> While specific vendors are available within Azure AD for MFA support via custom control in Conditional Access, your MFA provider may not be in the supported list or you may not have the necessary AAD Premium 2 licenses for this or your MFA provider is an on-premises only solution. In this case, you would want to have MFA integrated with your IDP. Integration with Azure AD Conditional Access is supported but your IDP needs to support the ability to respond to a protocol element that requests for MFA and issues additional assertion in the SAML token for AAD to accept it. Some additional notes about this.
<ul>
 	<li>The 'supportsMFA' flag MUST be set on the federated domain settings. This can be done via AAD PowerShell</li>
 	<li>The IDP must support triggering MFA when AAD sends a request to the IDP. For IDP's that use WS-Fed, it must support "<span style="color: #0000ff">wauth=http://schemas.microsoft.com/claims/multipleauthn</span>". For IDP's that use SAML protocol, it MUST support when the uri "<span style="color: #0000ff">http://schemas.microsoft.com/claims/multipleauthn</span>" is sent in the "<span style="color: #0000ff">&lt;samlp:RequestedAuthnContext&gt;</span>" element as per SAML specification.</li>
 	<li>The IDP must issue the SAML token with the assertion of "<span style="color: #0000ff">http://schemas.microsoft.com/claims/multipleauthn</span>". For WS-Fed, it needs to be added as an attribute assertion of type "<span style="color: #0000ff">http://schemas.microsoft.com/claims/authnmethodsreferences</span>". For SAML protocol, it needs to be added as part of the "<span style="color: #0000ff">&lt;saml:AuthnContext&gt;</span>" element in the SAML token.</li>
 	<li><span style="color: #ff0000"><em>NOTE: The SAML protocol exchange is not supported in AAD for production yet but is expected to be coming soon.</em></span></li>
</ul>
</li>
</ul>
<h1>Summary</h1>
Password Sync is the simplest option. If that doesn’t work for you go with evaluating what requirements you need and use the table above to decide the best choice between PTA &amp; ADFS.

If there is any additional clarification that you require or you believe there are additional differentiators, please <strong>tweet me at @MrADFS</strong> and I will take a look and respond. I will also keep the table up to date every quarter as we add more capabilities in these options.

&nbsp;

Cheers,

Sam

<strong><span style="color: #800000">Twitter: @MrADFS</span></strong>

<strong>Version History: </strong>
<ul>
 	<li>1/16/2019: Added WHFB cert trust bullet for 3rd party IDP support</li>
 	<li>12/11/2018: Added section on 3rd party IDP support</li>
 	<li>3/15/2018: PTA support for EAS added. Also added a couple of coming soon for first time sign-in to Office apps on Windows.</li>
 	<li>12/18/2017: Added note on Azure SQL</li>
 	<li>[Don't remember all the updates I've made as things changed]</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Restore your AD FS farm the easy way!</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/restore-your-ad-fs-farm-the-easy-way</link>
      <pubDate>Wed, 14 Sep 2016 19:25:48 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/?p=135</guid>
      <description><![CDATA[Howdy folks!

Today, I wanted to talk about a new way to easily backup and restore your ADFS farm....]]></description>
      <content:encoded><![CDATA[Howdy folks!

Today, I wanted to talk about a new way to easily backup and restore your ADFS farm. As you know, ADFS usage continues to grow actively connecting users to their on-premises applications (such as SharePoint, Skype for Business Servers) as well as connecting them to Office 365 and other Azure AD applications. In fact, ADFS is the <strong><em>#1 federation provider </em></strong>connecting users to Azure AD and signs-in  over <strong><em><span style="text-decoration: underline">42.2 million</span> unique users to Azure AD every week and growing</em></strong>. That’s a whopping number!

Well, as we talked to customers we saw a few needs from our customers and this shaped our approach and design for the “AD FS Rapid Restore Tool”. These were:
<ul>
 	<li>While we’ve always been upfront to our customers to run in a High Availability environment (at least 2 ADFS servers and 2 WAP servers), we see customers using just a single ADFS server and a single WAP server. Note that we see some of our competitors “tout” a simpler solution but conveniently avoid talking about high availability requirements and bury it fairly deep in their documentation. Recently we saw cosmic karma hit one of our customers which took them some time to restore login functionality to Office 365. So, we really wanted to enable our customers to restore login functionality in a shorter time. Note that we still recommend customers to run in a HA configuration as you can then be in a zero-impact situation even if a server goes down.</li>
 	<li>For most mid to large organizations, IT admins always want a quick way to go back in case there is some ‘catastrophe’ due to a configuration change gone wrong. The rapid restore tool enables this use case as well.</li>
 	<li>Larger IT organizations typically tend to minimize risk by mimicking their production environment in a parallel setup and validate any change prior to rolling it into production. We do this in our own IT organization in Microsoft as well (we have 2 ADFS farms handling millions of login transactions per day). The Rapid Restore tool enables this use case as well where it easy to take a “snapshot” of the existing ADFS farm configuration and clone it to a new machine that is isolated, perform configuration changes and validate them (let's say by using a HOSTS file or private DNS server).</li>
</ul>
Well, now you understand our motivation for releasing this tool, you can get started by downloading it from <a href="http://connect.microsoft.com/site1164/Downloads/DownloadDetails.aspx?DownloadID=61482">this link</a>.

For detailed documentation, see our TechNet documentation <a href="https://technet.microsoft.com/en-us/windows-server-docs/identity/ad-fs/operations/ad-fs-rapid-restore-tool">here</a>.
<h1>What cool features do we have for this release?</h1>
The tool supports the following capabilities:
<ul>
 	<li>Supports ADFS 2012R2 and ADFS 2016 (does not support ADFS 2.0 or ADFS 2012)</li>
 	<li>Supports both SQL and WID configurations of ADFS</li>
 	<li>Supports both self-generated token signing certificates (the default configuration in ADFS) or custom token signing certificates. In the case of custom token signing certificates, we will attempt to export these as well if it exportable. If they are not exportable, then you have to install these on the target machine prior to the restore process.</li>
 	<li>Supports export and restore of SSL certificates if the certificate is exportable. Otherwise, you will have to install these on the target machine prior to the restore process.</li>
 	<li>Supports storage of the exported backup in a networked folder or better still offers support to store in Azure storage.</li>
 	<li>All exported backups are strongly encrypted using the password provided.</li>
 	<li>Backups can be done on-demand or can be integrated within a scheduled task on the machine</li>
 	<li>Any custom attribute stores, additional authentication providers (for MFA) or local claims provider trusts (ADFS 2016 feature) are also backed up and restored.</li>
 	<li>All page customizations are backed up and restored.</li>
</ul>
<h1>How does it work?</h1>
It’s super simple.
<h2>#1. Get Ready</h2>
Download the tool from <a href="http://connect.microsoft.com/site1164/Downloads/DownloadDetails.aspx?DownloadID=61482">this link</a> and install in on your ADFS server. If you are running using a WID configuration (default), then run this on your primary ADFS server.

From an elevated PowerShell windows, run
<blockquote>
<pre><span style="color: #800000">import-module ADFSRapidRecreationTool.dll</span></pre>
</blockquote>
<h2>#2. Create a backup</h2>
The command for it is
<blockquote>
<pre><span style="color: #800000">Backup-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -EncryptionPassword "password" -BackupComment "Clean Install of ADFS (FS)" -BackupDKM</span></pre>
</blockquote>
In this case, we are opting to store it on local disk. We are encrypting the content by using “password” as the pass phrase. Simple huh! As I mentioned above, you can automate and run this periodically by including this as a scheduled task on your ADFS server.
<h2>#3. Restore from backup</h2>
First you need to have a machine handy. We also need to be domain joined prior to restoring the backup.

Then run the following command
<blockquote>
<pre><span style="color: #800000">Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\uSERS\administrator\testExport\" -DecryptionPassword "password"</span></pre>
</blockquote>
That’s it!

There are more examples and knobs that are describe on our TechNet documentation. Check it out and give us feedback.
<h1>Related Links</h1>
<ul>
 	<li><a href="http://connect.microsoft.com/site1164/Downloads/DownloadDetails.aspx?DownloadID=61482">Download the “AD FS Rapid Restore Tool”</a></li>
 	<li><a href="https://technet.microsoft.com/en-us/windows-server-docs/identity/ad-fs/operations/ad-fs-rapid-restore-tool">TechNet documentation for “AD FS Rapid Restore Tool”</a></li>
</ul>
That concludes my post. As always, we are open to getting feedback. Feel free to post a comment or tweet me <strong>(@MrADFS</strong>).

Thanks

//Sam (Twitter: <strong>@MrADFS</strong>)]]></content:encoded>
    </item>
    <item>
      <title>ADFS: Certificate Authentication with Azure AD &amp; Office 365</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/adfs-certauth-aad-o365</link>
      <pubDate>Tue, 19 Jul 2016 12:45:40 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/?p=96</guid>
      <description><![CDATA[Howdy folks!

Azure AD just announced GA support for certificate authentication in this blog post!...]]></description>
      <content:encoded><![CDATA[Howdy folks!

Azure AD just announced GA support for certificate authentication in <a href="https://blogs.technet.microsoft.com/enterprisemobility/2016/12/14/azuread-certificate-based-authentication-is-generally-available/">this blog post</a>! I’ve had a few folks asking me about how to configure ADFS for this. So, here are some instructions and gotchas for it.

Before we get started, do note that certificate authentication partially worked before this recent additional to Azure AD. It worked well on Windows devices (I use it with my smartcard on a regular basis against the ADFS service at our own company). The key capabilities that did not work well were:
<ul>
 	<li>Native apps on iOS &amp; Android did not support this even with modern authentication. The challenge here was that the browser dialog that the authentication library used on these devices could not access the certificate provisioned to the device (app sandboxing) or the browser dialog did not support client TLS capabilities. This changed with the latest iOS/Android platforms and the authentication support makes full use of these capabilities.</li>
 	<li>EAS access to Exchange Online did not support certificate authentication and only supported HTTP basic authentication.</li>
 	<li>There was no way in Azure AD to revoke a prior session state when the cert (or the device that stores it) gets compromised. Note that this is very important because while ADFS may do the orignial authentication for modern auth apps, subsequent access tokens are obtained by the app from Azure AD by using a refresh token. In this interaction the request does not go back to ADFS.</li>
</ul>
Well, all of this is fixed now!

<span style="color: #ff0000"><strong><u>A few things to remember:</u></strong></span>
<ul>
 	<li>Support for certificate authentication on native apps requires modern authentication. The only exception is EAS for which there is special support in EXO &amp; Azure AD.</li>
 	<li>Certificate authentication for browser apps &amp; native apps is only supported for <span style="text-decoration: underline">federated tenants</span> that use ADFS or a 3<sup>rd</sup> party IDP that supports certificate authentication. [<strong>Note: </strong>Using certificate authentication via EAS to EXO is supported for managed domains. However, if the end user were using browser or native apps, they would have to use username/password to login]</li>
 	<li>The Office app needs to have been updated with the latest modern authentication libraries. Not all of them support yet. Please refer to Office documentation or the Azure AD documentation for the list. For now, the list of apps is called out in the blog post.</li>
 	<li>Some of the Office apps (with modern authentication enabled) send 'prompt=login' to Azure AD in their request. By default Azure AD translates this in the request to ADFS to 'wauth=usernamepassworduri' (asks ADFS to do U/P auth) and 'wfresh=0' (asks ADFS to ignore SSO state and do a fresh authentication). For people interested in certificate authentication on these applications, you will need to modify the default Azure AD behavior. Just set the '<em>PromptLoginBehavior'</em> in your federated domain settings to be '<em>Disabled</em>'. See <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-faq#BKMK_7">https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-faq#BKMK_7</a> for more information and parameter reference.</li>
</ul>
<h1>How do I configure my ADFS for this?</h1>
Yay! Now that you are all bought into certificate authentication, let’s get you going and get this configured on ADFS. You can check out the Azure AD configuration in the blog post.
<h2>Ensure pre-requisites are met &amp; configured</h2>
<ul>
 	<li>You need ADFS 2012R2 or higher. You will need the Web Application Proxy to support this for <strong>extranet</strong> access. If you were per-chance using a third party proxy, this is not supported unless they support MS-ADFSPIP protocol document (all the MUST’s).</li>
 	<li>Ensure that all the roots and intermediary certificate authorities are populated correctly on all your ADFS and Web Application Proxy servers. ADFS uses the core windows OS support for this functionality and ensuring that you have the trust chain configured is needed for client TLS to work correctly. Most folks will use group policy to do this. <strong><em>TIP:</em></strong><em> Ensure that roots &amp; intermediaries are placed correctly in their own stores. Having duplicates or improperly placing them will prevent it from working correctly.</em></li>
 	<li>Ensure that port 49443 is reachable between the client device and ADFS as well as the client device and WAP servers. This may require additional firewall configuration to allow this traffic to flow between the client and ADFS/WAP servers. This is the default port at ADFS performs user certificate authentication.</li>
 	<li>ADFS 2016 supports a mode that allows user certificate authentication to happen over port 443. This is useful when you have more stringent firewall restrictions. To enable this, you will need your SSL certificate to have certauth.your_adfs_service_name added as an alternate subject name. Also, in this mode, wild card certs with no alt subj name are not supported. To configure this, you can find more info <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/operations/ad-fs-support-for-alternate-hostname-binding-for-certificate-authentication">here</a>.</li>
 	<li>Ensure that all revocation endpoints are reachable from the client device (inside or outside your network) as well from each of the ADFS/WAP servers.</li>
</ul>
<h2>Enable Certificate Authentication on ADFS</h2>
<ul>
 	<li>Open up the ADFS Management Console (MMC plug-in) and enable it on the primary authentication policy for extranet and optionally the intranet. Given most of your devices that use certificate authentication are likely to come only from the extranet, you could just enable it for the extranet. The policy should look like this</li>
</ul>
<p style="padding-left: 30px"><a href="https://msdnshared.blob.core.windows.net/media/2016/07/ADFS-cert-auth.png"><img class="alignnone size-full wp-image-105" src="https://msdnshared.blob.core.windows.net/media/2016/07/ADFS-cert-auth.png" alt="ADFS-cert-auth" width="491" height="549" /></a></p>

<ul>
 	<li>Validate that it works. You can use Windows or iOS/Android devices with a browser to check if it works correctly. After browser validation, you can try one of the supported Office apps listed in the blog post to try it out. You are now set. If you are having issues, refer to #1 to check it out.</li>
</ul>
<h2>Send the necessary claims to Azure AD.</h2>
Azure AD needs ADFS to send it the issuer and the serial # so that it can revoke or deny authentication in access scenarios for EAS or when a modern auth application attempts to exchange a refresh token for an access token. This way if a device ever gets lost or stolen, the admin can update the CRL and Azure AD will revoke access using the cert authentication.
<ul>
 	<li>First we need to get ADFS to pass these claims through to the issuance pipeline by adding the following 2 rules in the “Active Directory” Claims Provider trust. This tells ADFS that any time we are authenticating an Active Directory User, to allow this to pass through.</li>
</ul>
<blockquote><span style="color: #800000"><strong>c:[Type == " http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber"]  =&gt; issue(claim = c);</strong></span>

<span style="color: #800000"><strong>c:[Type == " http://schemas.microsoft.com/2012/12/certificatecontext/field/issuer"]  =&gt; issue(claim = c);</strong></span></blockquote>
<ul>
 	<li>Now add the same rules in the Azure AD/Office 365 relying party trust.</li>
</ul>
<blockquote><span style="color: #800000"><strong>c:[Type == " http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber"]  =&gt; issue(claim = c);</strong></span>

<span style="color: #800000"><strong>c:[Type == " http://schemas.microsoft.com/2012/12/certificatecontext/field/issuer"]  =&gt; issue(claim = c);</strong></span></blockquote>
<h2>Customize the Sign-In experience</h2>
By default ADFS displays "Sign in using an X.509 certificate" when using user certificate authentication. This is not very user friendly. Changing this is simple with powershell. Execute the following command to set it to what you need to be. In this case I'm choosing to keep it simple as "Sign in with a certificate".
<blockquote><span style="color: #800000"><strong>Set-AdfsAuthenticationProviderWebContent -Name CertificateAuthentication -DisplayName "Sign in with a certificate"</strong></span></blockquote>
It would look like this

<a href="https://msdnshared.blob.core.windows.net/media/2016/07/adfs-cert-auth-user.png"><img class="alignnone size-large wp-image-115" src="https://msdnshared.blob.core.windows.net/media/2016/07/adfs-cert-auth-user-1024x655.png" alt="adfs-cert-auth-user" width="1024" height="655" /></a>

<em><strong>Note:</strong></em> When both forms and certificate authentication is enabled, ADFS makes this a choice page to select and has a special optimization for username/password form and shows it inline. This was done as username/password case was the most common form and we optimized for this. You can choose to customize this ordering with javascript customizations. For example, let's say that you want certificate authentication only on iOS and Android devices and not for Windows PC's. You can do the following customization with JS:
<ul>
 	<li>Hide the choice entries (don't disable) when loading up.</li>
 	<li>Detect the platform using the user agent string that is available to JS</li>
 	<li>Auto-click "Cert Auth" link if iOS/Android is detected</li>
 	<li>Auto-click or un-hide other elements if a platform outside of iOS/Android is detected</li>
</ul>
<span style="color: #993300"><strong>Tip:</strong> The Authenticator application is required for Certificate Based authentication on iOS. So, to ensure that you have a good experience for your end users, you can add additional HTML to the login page to pre-install the authenticator app and add a link to the authenticator app. Also, on iOS, if certificate authentication is used in the additional authentication stage, you will see 2 prompts for the primary authentication stage. This is because, the authenticator application detects for certificate authentication based on a client TLS challenge and reinitiates the entire authentication with the system web view that has access to the user certificates provisioned. We recommend using certificate authentication in the primary stage. </span>
<h2>[Optional] Restrict token issuance based on certificate properties</h2>
There’s more fancy stuff you can do. In many cases, customers may have multiple types of user certificates in their environment and may want to restrict this type of access only if the user were using a certificate that was provisioned through an MDM channel or via group policy for Windows Devices. In this case you would,
<ul>
 	<li>Ensure that there was a distinct issuer or EKU for the certificate template.</li>
 	<li>Pass through these claims as we did in the prior section. The claim type for EKU (issuer is already handled in the prior section) would be “http://schemas.microsoft.com/2012/12/certificatecontext/extension/eku”</li>
 	<li>Add issuance authorization rules on the Azure AD/Office 365 relying party trust to restrict access by checking for the specific EKU or issuer if the user had done certificate authentication.</li>
</ul>
That’s it! You are all set from the ADFS side. You also want to upload the certificate authority information (and the CRL endpoints) to Azure AD as per instructions in the blog post (or in Azure AD docs)
<h2>Related Links</h2>
<a href="https://blogs.technet.microsoft.com/enterprisemobility/2016/12/14/azuread-certificate-based-authentication-is-generally-available/">Azure AD Blog Post announcing GA for Certificate Authentication Support</a>

<a href="https://docs.microsoft.com/en-us/azure/active-directory/active-directory-certificate-based-authentication-ios">Azure AD Docs for Certificate Authentication Support</a> (Note that this takes you to the iOS instructions and there is a drop down at the top of the page for Android)

That concludes my post. If you have any questions, tweet me @MrADFS.

Thanks

//Sam (@MrADFS)]]></content:encoded>
    </item>
    <item>
      <title>Sync Insights now available in Azure AD Connect Health</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/sync-insights-now-available-in-azure-ad-connect-health</link>
      <pubDate>Sun, 13 Dec 2015 20:02:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/12/13/sync-insights-now-available-in-azure-ad-connect-health/</guid>
      <description><![CDATA[Howdy folks,

We announced Azure AD Connect Health for sync recently in this blog post. It...]]></description>
      <content:encoded><![CDATA[Howdy folks,

We announced Azure AD Connect Health for sync recently in <a href="http://blogs.technet.com/b/ad/archive/2015/11/05/azure-ad-connect-health-for-sync-is-now-in-public-preview.aspx">this blog post</a>. It provides you monitoring &amp; notification of the sync component in Azure AD Connect. We’ve just added more functionality to it by offering sync insights.

Sync Insights offer 2 key capabilities in this release:
<ul>
	<li>Latency of sync operations</li>
	<li>Object Change trend</li>
</ul>
To get to the insights ‘blade’, please choose the sync server on your sync health blade and then click on the latency part within this blade.
<h1>Sync Latency</h1>
A graphical trend of latency of the sync operations (import, export etc…) for connectors. This gives you a quick and easy way to both understand the latency of your operations (great for customers with large set of changes occurring) as well as detect anomalies in latency that require further investigation

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/1207.aadch_sync_insights_latency.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/1207.aadch_sync_insights_latency.png" alt="" border="0" /></a>

By default, only the latency of the ‘Export’ operation for the Azure AD Connector is shown. To see more operations on the connector or operations from other connectors, right click on the chart and choose the specific operation and connector.
<h1>Sync Object Changes</h1>
A graphical trend of the # of changes that are being evaluated and exported to Azure AD. Today, this is hard to gather from the sync logs. The charts give you an easy way to monitor the # of changes that are occurring in your system. More importantly, it gives you a good visual view into failures occurring in the sync system.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4760.aadch_sync_insights_objcount.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4760.aadch_sync_insights_objcount.png" alt="" border="0" /></a>

&nbsp;

Hope you like this addition to the arsenal of tools that makes your life as an IT admin easier. If you have any feedback or any additional requests for sync insights, please do drop me a note as a comment or you can tweet me @MrADFS.

Thanks

//Sam (@MrADFS)]]></content:encoded>
    </item>
    <item>
      <title>Azure AD Connect Health now supports RBAC for delegated access!</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/azure-ad-connect-health-now-supports-rbac-for-delegated-access</link>
      <pubDate>Tue, 20 Oct 2015 07:50:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/10/20/azure-ad-connect-health-now-supports-rbac-for-delegated-access/</guid>
      <description><![CDATA[Howdy folks!

This is a short post. A key ask from our customers using Connect Health is to NOT...]]></description>
      <content:encoded><![CDATA[Howdy folks!

This is a short post. A key ask from our customers using Connect Health is to NOT require Azure AD global administrator access for Connect Health. This prevents them from having to add more people than needed to this role. Fear not anymore!

We just added RBAC support to Azure AD Connect Health. It's pretty simple and looks just like you would assign access for other Azure resources within the portal. All you have to do is to select the role and add users/groups to a specific role.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/8171.aadch_rbac_01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/8171.aadch_rbac_01.png" alt="" border="0" /></a>

A few concepts to understand:
<ul>
 	<li>There are 3 types of roles supported in Connect Health. Owners (can do everything), Contributor (can view and make management changes) and Reader (can just view). These roles can be assigned to users or groups</li>
 	<li>Scope of Access: You can do this across all your service instances or assign at a per service instance. Typically you would do only manage access across all service instances. However, as we expand to supporting sync and AD DS, we wanted to support isolation based on customer input.</li>
 	<li>By default (even though you cannot see it), all Azure AD Global Administrators in your tenant are owners across all service instances. This is the base policy for Connect Health and cannot be changed.</li>
</ul>
You can find more information on RBAC <a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect-health-operations/#manage-access-with-role-based-access-control">here</a>.

<strong>Note:</strong> There's one glitch in the RBAC blade that you may see. When assigning access for the first time, you will see a 'Loading' message on the blade even though it's loaded. Just continue on to manage access. We are investigating this issue.

Feedback always welcome!

Thanks

//Sam (@MrADFS)]]></content:encoded>
    </item>
    <item>
      <title>Azure AD Connect Health - Top Users with failed username password logins for ADFS</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/azure-ad-connect-health-top-users-with-failed-username-password-logins-for-adfs</link>
      <pubDate>Mon, 28 Sep 2015 18:49:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/09/28/azure-ad-connect-health-top-users-with-failed-username-password-logins-for-adfs/</guid>
      <description><![CDATA[[Update 11/3/2016: Added more information on IP address]

Hello!

I recently blogged about...]]></description>
      <content:encoded><![CDATA[<em><strong>[Update 11/3/2016: Added more information on IP address]</strong></em>

Hello!

I recently <a href="http://blogs.msdn.com/b/samueld/archive/2015/09/25/understanding-alerts-in-azure-ad-connect-health.aspx">blogged about Alerts</a> in Azure AD Connect Health. Connect Health is more than just being a monitoring system for your identity components on-premises.

In addition to monitoring, one of our goals is to use the power of the cloud to provide deeper insights into your on-premises identity systems for operational as well as security insights. For ADFS, we provide these insights by analyzing audit logs that are streamed to the Connect Health service. Today, with Connect Health, we provide login trending on the following areas
<ul>
 	<li><em><strong>Successful logins</strong></em> that can be pivoted by Application, Network Location, Type of Authentication or the server. This can be useful for capacity planning, understanding your load balancing or seeing the trends of how end users login. For example, one of our customers used this to find the optimal down time across their global data centers for maintenance operations. Another customer, used this to see adoption trends for applications.</li>
 	<li><em><strong>Failed logins</strong></em> that can be pivoted by the failure type (e.g. disabled account, username/password failure). This is useful from a security standpoint to understand baselines and observe trends. Changes in trends are likely to need you to dig in further.</li>
 	<li><em><strong>Unique user account</strong></em> logging in via ADFS that can be pivoted by applications.This really gives the perspective of adoption &amp; ROI for running the authentication service as it provides info on how many unique users are logging in through ADFS for your applications.</li>
</ul>
You can read more about this in our documentation <a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect-health-adfs/#usage-analytics-for-ad-fs">here</a>.

Today, we are announcing a much asked feature from our customers by providing a new report to view the top 50 users that are failing username/password logins. Let’s dig in.
<h1>Top 50 Users with failed Username/Password logins</h1>
In real life, it is quite natural for users to fail their login using username/password occasionally. It typically happens to me for the following reasons.
<ul>
 	<li>I have a complex password that I fat finger quite often especially on mobile devices</li>
 	<li>I forgot my password and take a few guesses on what it is</li>
 	<li>I make a typo on my user ID</li>
</ul>
But you can also see failed logins occurring due to the following cases
<ul>
 	<li>A badly written app saves the password for a user account and keeps retrying continuously even after the password has expired. (we see this quite often for some of our testing apps internally within Microsoft IT environment). In this case, if you know the app and the user you’d want to contact them and investigate.</li>
 	<li> A malicious user attempting to sign-in to a user’s account with a series of well-known passwords.</li>
</ul>
Azure AD Connect Health for ADFS now uses all the login data (audits) to highlight the top 50 users with failed username/password logins. Let’s examine experience.
<h1>The Azure Portal Experience</h1>
Within the service instance blade, you will now see a part under ‘Reports’ that is an entry point to the failed username/password report.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6102.aadch_baduppwd_02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6102.aadch_baduppwd_02.png" alt="" border="0" /></a>

Within this part you have quick access to the following pieces of information
<ul>
 	<li>Total # of failed username/password logins in the last 30 days</li>
 	<li>Average # of users that failed with a bad username/password login on a daily basis. This piece of data gives you a baseline and if you see this jump up, definitely something that you should pay attention to and investigate.</li>
</ul>
Clicking on this part takes you to the main report blade which looks like the below. <strong>Obviously, I've obscured the user id's below for privacy reasons.</strong>

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6747.aadch_baduppwd_01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6747.aadch_baduppwd_01.png" alt="" border="0" /></a>

The part of the experience is a graph that shows 2 lines for the following:
<ul>
 	<li>The total # of failed logins due to a bad username/password on a per-day basis. This great to get a good baseline for your current usage. You will typically see this # decrease during weekends and increase during the week.</li>
 	<li>The total # of unique users that failed logins on a per-day basis. This is also great to establish a baseline.</li>
</ul>
Not very well know is that you can hover on a data point which shows the value (Y-axis) and the day (X-axis). You can also hover near a data point that shows you the value (Y-axis) for all the lines.

The next section provides a grid view of the top 50 users. It contains the following information as columns:
<ul>
 	<li><strong>USER ID:</strong> This shows the user id that was used. Note that the value is what the user typed in and in some cases, you will also see the wrong user id being used.</li>
 	<li><strong>FAILED ATTEMPTS:</strong> This shows the total # of failed attempts for that specific user id. The table is sorted with the most # of failed attempts bubbling to the top so that you can see the top hitters.</li>
 	<li><strong>LAST FAILURE:</strong> This shows the timestamp when the last failure occurred. This gives you sense if the problem is still occurring or has been fixed.</li>
 	<li><strong>LAST FAILURE IP:</strong> <span style="color: #ff0000"><em>[Updated on 11/3/16]</em></span> This shows the last IP address where we saw the failed request originate from. This requires ADFS 2012R2 (with the latest patches) or higher. See picture below for this.</li>
</ul>
<img src="https://msdnshared.blob.core.windows.net/media/2016/11/aadch_baduppwd_04.png" alt="aadch_baduppwd_04" width="591" height="708" class="size-full wp-image-155 alignnone" />

<strong><em>NOTE:</em></strong>
<ul>
 	<li><em><span style="color: #800000">Failed logins due to disabled accounts or locked out accounts are not included in this. If you'd like a separate report for this and it is important to you, do let us know (info at the end of this post)</span></em></li>
</ul>
A typical workflow to use the reports would be:
<ol>
 	<li>Establish a baseline of failed logins and the # of users that have failed logins due to bad username/password. Any time you are above your baseline, dig into the top offenders.</li>
 	<li>For the top offenders, check to see how many failed attempts they have. In a 30-day period, you shouldn’t see anything over a value of 100 (or a value that is deemed to not be a security event in your org). If so, it is likely that there is a rogue app and you can track down the rogue app by reaching out to the user. Also, check if the user recently changed their password resulting in the rogue app constantly trying to login with the expired credentials. If you find that it is a rogue app due to an expired password, do let the vendor know as this pattern is essentially vector for an inadvertent DOS attack.</li>
 	<li>If it is not a rogue app, there is potential for malicious activity. You can take additional precautions by
<ol>
 	<li>Resetting the password for the user</li>
 	<li>Enabling MFA at ADFS or in Azure AD with Azure MFA</li>
</ol>
</li>
 	<li>For those of you who use AD Account Lockout Policies or ADFS extranet soft account policy, this also provides you a baseline # to set within your organization.</li>
</ol>
Let me show you an example. Below is a sample report.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/5140.aadch_baduppwd_03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/5140.aadch_baduppwd_03.png" alt="" border="0" /></a>

As you can see, you have one account that started peaking with bad username/password logins around 9/10 and this was fixed around 9/21 and accounted for over 650K failed requests in that period! This was a rogue app that kept hammering on ADFS with an expired password.

That concludes this post. As always, if you have thoughts/feedback/comments/suggestions, drop us a line at the <a href="https://social.msdn.microsoft.com/forums/azure/en-US/home?forum=WindowsAzureAD">AAD forums</a>, or leave a comment in this blog or just tweet (@MrADFS). We had a few other features/capabilities in this area and we deprioritized it and are happy to revisit it with your feedback.

Thanks

//Sam (@MrADFS)]]></content:encoded>
    </item>
    <item>
      <title>Understanding Alerts in Azure AD Connect Health</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/understanding-alerts-in-azure-ad-connect-health</link>
      <pubDate>Fri, 25 Sep 2015 17:59:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/09/25/understanding-alerts-in-azure-ad-connect-health/</guid>
      <description><![CDATA[Howdy folks!

Today, I thought I’d talk about the alert system in Azure AD Connect Health. Azure...]]></description>
      <content:encoded><![CDATA[Howdy folks!

Today, I thought I’d talk about the alert system in Azure AD Connect Health. <a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect-health/" title="Azure AD Connect Health">Azure AD Connect Health</a> is a premium feature of Azure AD that offers monitoring capabilities as well as deep insights into the systems that it monitors. It currently supports monitoring ADFS and will be extended to support monitoring the on-premises components of your hybrid identity infrastructure such as sync components of Azure AD Connect as well as Active Directory domain services.

Before we get started, let’s get through some basics.
<ul>
 	<li>Connect Health is targeted at customers who don’t have any or have limited monitoring capabilities on their identity infrastructure. A well monitored identity system is key to having reliable access to applications services such as Office 365.</li>
 	<li>You can also run Connect Health alongside SCOM agents as it offers some unique capabilities such as providing insight into logins and additional reports around these.</li>
 	<li>As I’d mentioned, you need Azure AD premium for this. For more information, see <a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-get-started-premium/">Getting started with Azure AD Premium</a>. You can also start a free 30-day trial. Check out <a href="https://azure.microsoft.com/trial/get-started-active-directory/">this</a> link.</li>
</ul>
There are a few of unique advantages to having a cloud based system for alerting.
<ul>
 	<li>Ability to update alert definitions without requiring admin intervention. Imagine, we released a critical patch to ADFS and want to alert admins on this, we just need to add the alert at the service level and it would just show up for you.</li>
 	<li>Ability to look at multiple data points to determine if there is an issue. Often, you need more than a single data point from a server or multiple data points across many servers to determine if it is truly an issue. For example, let’s say your CPU is spiking. To truly alert, we want to look at data points for the last 3 hours before really letting you know if it is an issue. A cloud service truly this makes it possible without putting the burden on you.</li>
 	<li>Ability to compare data with other AAD/Microsoft service components. Imagine, wanting to compare the token signing certificate used by ADFS currently with the one stored in the cloud, we can do this all from the service and make it easy.</li>
</ul>
Let’s now break down alerts into its various components as seen from the navigational flow within the portal. We call this the alert ‘journey’ (a term used for the new Azure Portal that describes a navigational flow).
<h1>The Alerts Part</h1>
This one is pretty simple to understand and lives on the main dashboard for a service instance (e.g. an ADFS farm)

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6114.aadch_alerts_01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6114.aadch_alerts_01.png" alt="" border="0" /></a>

The things to know about this are
<ul>
 	<li>“Active” shows the number of active alerts. This is what you’d care about the most from an operational standpoint. The # of active alerts could either be alerts or warnings.</li>
 	<li>“Resolved from last 24 hours” shows the # of alerts that were generated and resolved. This is useful when you want to review past instances that got fixed or to simply let your manager know ‘Hey, I fixed this issue’.</li>
 	<li>As with any part within the new Azure Portal, you can always pin a part to your dashboard by just right clicking on the part and clicking “Pin to dashboard’. This is such a core concept in the new portal that focuses on “Pin the parts that you care about the most”.</li>
</ul>
<span class="Apple-tab-span"> <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/7713.aadch_alerts_02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/7713.aadch_alerts_02.png" alt="" border="0" /></a></span>
<ul>
 	<li>Clicking on any location within this part will open up the <strong>Alerts</strong> “blade”.</li>
</ul>
<h1>The Alerts Blade</h1>
This is one of the more important blades for alerts and it is all about showing you an all up view of issues and potentially where the issues are occurring. Let’s dive into the details of this blade.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4276.aadch_alerts_03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4276.aadch_alerts_03.png" alt="" border="0" /></a>

There are 2 sections within the grid, one about active alerts (most important) and the other about resolved alerts. Things you need to know about this blade.
<ul>
 	<li>Within active alerts, the alerts are sorted by when the alert was raised with the most recent one on the top. This way the most recent issues are shown at the top.</li>
 	<li>The <strong><span style="color: #800000">Type</span></strong>column is to show the severity of the impact. This way, it is clear to you on which needs to be acted upon earlier. Within the service, we deem an alert type to be one of the following:
<ul>
 	<li><em><strong>Error:</strong></em> These are issues that you should not be having and we need you to fix as soon as possible as this is end user impacting. One exception is that we also deem the “Health service data is not up to date” to be an error if we are not receiving the critical information (e.g. event logs) that enables the services to process and let you know if you have an issue.</li>
 	<li><em><strong>Warning:</strong></em> These are things that we don’t believe to be end user impacting yet, but could be a potential issue in the future. Also, an issue where you are not running in optimal configuration is deemed a warning.</li>
</ul>
</li>
 	<li>The <strong><span style="color: #800000">‘Scope’</span></strong>column gives you the indication of whether the issue is occurring in a single server, multiple servers or impacts the entire service.
<ul>
 	<li>If it is a single server, you will see the server name in the scope column (e.g. ADFS-01)</li>
 	<li>If it is the same issue on multiple servers, we opted to collapse this into a single row item because it is very likely it is a similar issue but needs to be fixed on each of these servers. It’s just easier to view and operated in a single context.</li>
 	<li>If it at the service level, you will see the service name as the value in the scope column. (e.g. adfs.contoso.com)</li>
</ul>
</li>
 	<li>The<strong><span style="color: #800000"> ‘Last Detected’</span></strong>column provides a timestamp on when we processed data that still makes us think there is an issue. It is very useful to compare it with the ‘Raised’ column (time when we first detected the issue) and provides you a view into how long the issue has been active.
<ul>
 	<li>Note: Every time we check and find the same issue, we don’t raise a new issue and merely update the existing alert with the most recent information.</li>
</ul>
</li>
 	<li>The <span style="color: #800000"><strong>‘Resolved Alerts’</strong></span>section provides you a similar view as active, but you’ll see the ‘Resolved’ column now filled with a value. This list is sorted by the ‘Resolved’ timestamp with the most recent being listed first.
<ul>
 	<li>By default, this is list is for the alerts resolved in the last 24 hours. However, you can go change the time range by clicking on the ‘Time Range’ Command at the top of the blade</li>
</ul>
</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/8625.aadch_alerts_04.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/8625.aadch_alerts_04.png" alt="" border="0" /></a>
<ul>
 	<li>You can also get email notifications by clicking on the 'Notification Settings' in the command bar on this blade. We opted to provide this at a service instance level (e.g. a specific ADFS farm) versus having one tenant wide setting across all the services. The reason for this is that we've had customers tell us that getting email notifications and its audience can vary based on the service instance. For example, I want email notifications for my production ADFS service but not for my test ADFS service. Also, we took this route because as we add more support for monitoring AAD Connect(sync)/ADDS, the target audience for alerts for these will vary. If you think also would like a setting at the global level, do let us know. Also, don't forget to hit the 'Save' button on the command bar at the top of the blade when making changes.</li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/7217.aadch_alerts_09.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/7217.aadch_alerts_09.png" alt="" border="0" /></a>
<ul>
 	<li>Clicking on an ‘Active’ or ‘Resolved’ alert will now take you to the Alert “Blade” which provides you details of the specific alert.</li>
</ul>
<h1>The Alert Blade</h1>
The purpose of the alert blade is to inform you on what the issue is, its inherent impact and more importantly tell you how to fix this.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4035.aadch_alerts_05.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4035.aadch_alerts_05.png" alt="" border="0" /></a>

Thing to know about this blade:
<ul>
 	<li><span style="color: #800000"><strong>‘Raised’</strong></span> &amp; <span style="color: #800000"><strong>‘Last Detected’</strong></span> give you an indication of the length of an ongoing issue. If multiple servers are impacted, we use the earliest timestamp to indicate the time since you first started seeing the issue.</li>
 	<li><span style="color: #800000"><strong>‘Issue’</strong></span> tells you about the issue and where possible it’s impact. This way, as an admin, you clearly understand the impact and can prioritize resolving the issue based on the impact. In some cases, the issue can be due to more than one reason. We will list this out where possible.</li>
 	<li><span style="color: #800000"><strong>‘Fix’</strong></span> as it states is all about giving you instructions, on how to fix the issue. We try to be as prescriptive as possible so that it is easy for the admin to immediately know the instructions to fix this.</li>
 	<li>In many cases, there is great content for you to learn or understand issues. We make this available for you right there with <span style="color: #800000"><strong>‘Related Links’</strong></span></li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4848.aadch_alerts_06.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4848.aadch_alerts_06.png" alt="" border="0" /></a>

Below this you will find additional data/details on the issue.

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/5353.aadch_alerts_07.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/5353.aadch_alerts_07.png" alt="" border="0" /></a>

You will see the server(s)/service impacted and clicking on this provides the actual data that resulted in the alert. You can click to view this data. The data varies based on the alert and is quite self-explanatory!

<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6472.aadch_alerts_08.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/6472.aadch_alerts_08.png" alt="" border="0" /></a>
<h1>How do alerts get raised?</h1>
Now that you under the elements of the alert experience, obvious questions that may come to your head are “how do these alerts get raised?” and “what data is used to raise these alerts”.

Alerts can be based on event log info, data returned by custom PSH scripts that are run by the monitoring agent (e.g. SSL binding info on a ADFS server, AAD relying party trust info in ADFS), performance data (e.g. CPU) and service related data (e.g. AAD trust info).

There are 3 types of alerts supported by the service
<ol>
 	<li>A single data point that is received by the service (e.g. EventID==94)</li>
 	<li>Multiple data points of the same type or of different types (e.g. EventID==94 &amp;&amp; ADFS.AADRP == Disabled)</li>
 	<li>Multiple data points of the same type across a time range (e.g. CPU)</li>
</ol>
<h1>How do alerts get resolved?</h1>
This is important to understand, especially for those used to SCOM. You don’t ever have to take an action to resolve an alert! Alerts are resolved in one of 2 ways:
<ul>
 	<li>The conditions that were checked to raise the alert change in a more recent collection of the data, because you made a fix (e.g. the SSL certificate in ADFS servers were updated)</li>
 	<li>In some cases, especially event log based alerts, we may not have a positive suppression event. In this case, we auto resolve the alert within a certain period of time. The current service level setting is 72 hours</li>
</ul>
<h1>Can I disable or add an alert?</h1>
Nope! The focus of the Connect Health service is to make it simple and ensure that we provide meaningful and impactful alerts. We think we can be smart about the alerts by using as much data as possible to get it right.

Of course, we may get it wrong. Do, let us know and we’ll certainly look to improve the alert trigger and its suppression.

&nbsp;

In summary, this gives you more than you want to know about the alert system. If you have any questions/comments, drop us a line at the <a href="https://social.msdn.microsoft.com/forums/azure/en-US/home?forum=WindowsAzureAD">AAD forums</a>, or leave a comment with this blog post or just tweet (@MrADFS)

Thanks

//Sam (@MrADFS)

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Desktop SSO on Win10 Domain Joined machines using EDGE browser</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/desktop-sso-on-win10-domain-joined-machines-using-edge-browser</link>
      <pubDate>Wed, 19 Aug 2015 07:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/08/19/desktop-sso-on-win10-domain-joined-machines-using-edge-browser/</guid>
      <description><![CDATA[[Updated on 12/12: Added more strings for Nov '15 Windows 10 release]

[Updated on 3/3: Added...]]></description>
      <content:encoded><![CDATA[<em><strong>[Updated on 12/12: Added more strings for Nov '15 Windows 10 release]</strong></em>

<em><strong><em><strong>[Updated on 3/3: Added simpler step when you don't have any Windows Phone 10 connecting from inside the corp network]</strong></em>
</strong></em>

<em><strong>[Updated on 9/13/16: Added more strings for Jul '16 Windows 10 release - Anniversary Update]</strong></em>

Hello,

With the recent release of Windows 10, I’ve been fielding some questions on SSO being broken and users being prompted with forms authentication when accessing from domain joined machines inside your network.

As you may know, ADFS supports a feature to selectively offer Windows Integrated authentication inside your corporate network based on device/browser. This is done using a white list of user agent string. The key benefits are
<ul>
 	<li>Desktop SSO after you have logged in from a domain joined machine.</li>
 	<li>Improved experience if you are using devices such as iOS/Android that don’t support seamless Kerberos authentication</li>
 	<li>Improved experience if you are using browsers such as Firefox or Chrome on Windows domain joined machines where the browser is not capable of supporting seamless Kerberos authentication. Please note that in some cases/versions of these browsers, they do support Kerberos authentication, but configuration can be quite cumbersome.</li>
</ul>
<h1>Setting the Configuration for Windows 10 Domain Joined devices</h1>
Follow the steps provided at <a href="https://technet.microsoft.com/en-us/library/Dn727110.aspx">https://technet.microsoft.com/en-us/library/Dn727110.aspx</a> to set the accepted user agent strings. In addition to the list provided in the example, please add the following strings (each line represents an entry)

<strong>You have no Windows 10 Phone(s)  that connect from inside your network (simple)</strong>

[Windows Phone Edge browser uses similar strings and some versions of Windows 10 Phone do not support NTLM authentication. So, if ADFS tries to do Windows Integrated Auth, this will fail]

<span style="font-family: 'courier new', courier;color: #993300">Edge/</span>

&nbsp;

<span style="color: #ff0000"><strong><span style="font-size: large">(OR)</span></strong></span>

&nbsp;

<strong>Windows 10 - Jul '15 Release</strong>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; Win64; x64; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12</span>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12</span>

<span style="font-family: 'courier new', courier;color: #800000">In-Domain</span>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12</span>

<strong>Windows 10 - Nov '15 Release</strong>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/</span>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; Win64; x64; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/</span>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/</span>

<strong>Windows 10 - Anniversary Update (Jul '16 release)</strong>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/</span>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; Win64; x64; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/</span>

<span style="font-family: 'courier new', courier;color: #800000">Mozilla/5.0 (Windows NT 10.0; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/</span>
<h1>How does it work?</h1>
It is quite simple…
<ol>
 	<li>When ADFS 2012 R2 receives a request over passive protocols such as WS-Fed, SAML or OAuth Authorize endpoints inside your network, it reads the UA string on the HTTP request.</li>
 	<li>It compares the UA string to the list that is configured by the admin (or uses the defaults in the system).</li>
 	<li>If it cannot find a match (‘contains’ match), it then falls back to forms authentication so that the experience is better.</li>
</ol>
Note: If you have non domain joined windows machines, there are many cases where you will not see forms and instead see a NTLM prompt.

&nbsp;

Thanks

//Sam (@MrADFS)]]></content:encoded>
    </item>
    <item>
      <title>Office Modern Auth &amp; ADFS: Making it work</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/office-modern-auth-adfs-making-it-work</link>
      <pubDate>Fri, 05 Jun 2015 06:32:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/06/05/office-modern-auth-adfs-making-it-work/</guid>
      <description><![CDATA[Howdy folks,

I've worked with a few customers now who have had a few issues when using Office...]]></description>
      <content:encoded><![CDATA[Howdy folks,

I've worked with a few customers now who have had a few issues when using Office Modern Authentication preview that was <a href="http://blogs.office.com/2015/03/23/office-2013-modern-authentication-public-preview-announced/">announced recently</a> and this post is about a few tips that smoothens out the sign-in experience. Customers who are federated and use ADFS have really looked at Office Modern authentication to provide 2 key benefits.
<ul>
 	<li>Desktop SSO from a domain joined machine accessing office resources from inside their corporate network. This was especially relevant with Outlook because in prior versions, the user would need to enter their username &amp; password even if the were logging in from a domain joined machine inside their company network.</li>
 	<li>Customers want to enable MFA for extranet access or only have smartcard login available to their users</li>
</ul>
<div><strong>Issue #1: Desktop SSO does not work</strong></div>
<div>As soon as you try out the new Azure AD app (e.g. Office native apps) modern auth flows with ADAL, you may notice that you are not getting SSO. Office clients have an optimized path for their first accounts to work against the WS-Trust kerberos authenitcation endpoints of ADFS. If this fails, then the Office clients fall back to an interactive login session through a web browser dialong. Unfortunately, Office and ADAL clients target the WS-Trust 1.3 version of the endpoint for windows integrated authentication which is not enabled by default. This can be fixed easily by enabling it on the ADFS service. The PSH cmdlet to do this is:</div>
<div style="padding-left: 30px">

<span style="font-family: 'courier new', courier;color: #000080">Enable-AdfsEndpoint -TargetAddressPath "/adfs/services/trust/13/windowstransport"</span>

</div>
<div>The office and ADAL teams are working towards using the standard WS-Trust 2005 endpoint that is enabled by default in ADFS. However, this probably won't show up until a future CU for the Office 2013 client. It's better for you to enable the endpoint and there is no difference in behaviors between the 2 versions of the endpoints.</div>
&nbsp;
<div><strong>Issue #2: ADFS Error page during authentication</strong></div>
<div>The next issue that you could face is an error page on ADFS when being accessed by iOS or Android Office apps within the company network. This error occurs because Azure AD treats 'prompt=login' sent by the application that uses modern authentication (a.k.a. ADAL enabled) as 'wauth=&lt;pwd-auth&gt;' (asks ADFS to do password auth) and 'wrefresh=0' (asks ADFS to ignore any prior SSO state) in the request to ADFS. With ADFS 2012R2, the default intranet authentication policy does not enable password authentication by default. As a result, ADFS fails the request. The fix for this is simple. Just enabling the password authentication for the intranet will fix this issue. You can access this by editing the primary authentication policy from the AD FS snapin (under Authentication Policies). See image below.</div>
<div><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4478.ADFS_auth_policy_dialog.jpg"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4478.ADFS_auth_policy_dialog.jpg" alt="" border="0" /></a></div>
You do not have to worry about any impact to your existing Windows Integrated Authentication. If Windows Authentication is enabled, ADFS will always try this if the user agent string matches the list that is configured in ADFS and fall back to forms authentication otherwise.
<div>In addition, you may find that users are unable to login using their smartcard (cert authentication) in certain cases. If you do discover this (not very common), please call Microsoft support to enable a flag on your tenant to not enable the 'wauth' behavior conversion performed by AAD in the issue #2 above to be disabled.</div>
&nbsp;
<div>// Thanks //</div>
<div>Sam (<strong>@MrADFS</strong>)</div>
&nbsp;
<div>Hope you find these tips useful. Some of this information is captured in <a href="https://support.microsoft.com/en-us/kb/3052203">KB3052203 </a>and <a href="https://support.microsoft.com/en-us/kb/3015526">KB3015526</a>.</div>]]></content:encoded>
    </item>
    <item>
      <title>ADFS 2012 R2 now supports Password Change (not reset) across all devices</title>
      <link>https://docs.microsoft.com/archive/blogs/samueld/adfs-2012-r2-now-supports-password-change-not-reset-across-all-devices</link>
      <pubDate>Wed, 13 May 2015 14:57:00 GMT</pubDate>
      <dc:creator><![CDATA[Samuel Devasahayam [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/samueld/2015/05/13/adfs-2012-r2-now-supports-password-change-not-reset-across-all-devices/</guid>
      <description><![CDATA[Howdy everyone!
Today I&rsquo;m going to blog about password change feature in ADFS. This is not a...]]></description>
      <content:encoded><![CDATA[<p>Howdy everyone!</p>
<p>Today I&rsquo;m going to blog about password change feature in ADFS. This is not a well-known feature but a very useful one for many organizations.</p>
<p>Password change is the ability for a user (in Active Directory Domain Services) to change their password with knowledge of their old password. Note that this is <span style="text-decoration: underline;">not password reset</span> where the user does not know their password and needs to use an alternate credential (such as phone or security questions) to reset their password. One such example is Azure Active Directory that provides Self-Service Password Reset capabilities in the cloud that make this simple for end users. &nbsp;Traditionally users would use their windows domain joined devices inside their corporate devices or they would change password through their on-premises OWA system that provided this functionality. However, with moving to Office 365 and the advent of multiple devices accessing company resources, users cannot really use those same mechanisms anymore. Employees are also not always connected to the corporate network when their password need to be changed which can also prove to be challenging and a help desk call generator.</p>
<p>The feature in ADFS was meant to address the above issues. The use cases that we targeted were the following:</p>
<ul>
<li><strong>Expired Password:</strong> User is accessing applications such as Office 365 and is logging onto ADFS using their expired password. At this time, ADFS will interrupt the login flow (when password change is enabled) and ask the user to change their password. Once they change their password, they are seamlessly taken back to the login page, enter their changed password and subsequently taken to the application that they were logging into.</li>
<li><strong>User Must Set Password at next login:</strong> Many times when you have a new employee or when a password is reset through a password reset mechanism such as the <a href="https://msdn.microsoft.com/en-us/library/azure/dn510386.aspx">SSPR feature in Azure AD</a>, users need to change their passwords at the next login into AD.</li>
<li><strong>Change Password when passwords are soon to expire:</strong> We targeted this case specifically for Office 365 applications where ADFS can notify Office apps that a password is set to expire with 14 days (not configurable) and notify the user and now the user can just click on the change password link when this notification appears and can change their password via ADFS.</li>
<li><strong>Change Password any time by directly going to the password change URL:</strong> This is simply a case where the user can bookmark the change password URL and just access this to change their password in AD.</li>
</ul>
<h1>Enabling Change Password in ADFS</h1>
<p>By default, this functionality is disabled in ADFS. Change password looks just like another endpoint in ADFS and all you need to do is enable the endpoint. You can use the MMC snapin to enable this.</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/0412.updatepassword_01.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-64-85/0412.updatepassword_5F00_01.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/0412.updatepassword_01.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-64-85/0412.updatepassword_5F00_01.png" alt="" border="0" /></a></p>
<p>You can also do this via PSH using the Set-AdfsEndpoint cmdlet.</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/8206.updatepassword_02.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-64-85/8206.updatepassword_5F00_02.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/8206.updatepassword_02.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-64-85/8206.updatepassword_5F00_02.png" alt="" border="0" /></a></p>
<p>Once enabled, users can always access the change password page via <a href="https://adfs.contoso.com/adfs/portal/updatepassword/">https://adfs.contoso.com/adfs/portal/updatepassword/</a>. It would look like this</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4667.updatepassword_03.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-64-85/4667.updatepassword_5F00_03.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/64/85/4667.updatepassword_03.png" original-url="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-64-85/4667.updatepassword_5F00_03.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><strong><em><span style="text-decoration: underline;">Note</span>: ADFS 2012 R2 required authenticated/registered devices (a.k.a &lsquo;workplace join&rsquo;) to allow the change of passwords. Based on customer feedback, we have relaxed this constraint and allow this from all devices. You will need to apply <a href="https://support.microsoft.com/en-us/kb/3035025/">3035025</a> hotfix on all the ADFS servers.</em></strong></p>
<h1>Enabling password expiry notification</h1>
<p>This is a use case that is specifically targeted towards logging into Office 365. Enabling this requires a modification to the &lsquo;issuance&rsquo; claims rules for the relying party trust that represents Azure Active Directory. If you used AAD PSH to create this RP trust, you will see this as the &ldquo;Office 365 Identity Platform&rdquo; RP trust.</p>
<p>All you need to do is to add the following claims rule to the issuance claims when sending tokens to Azure AD/Office 365.</p>
<p><em>c1:[Type == "<a href="http://schemas.microsoft.com/ws/2012/01/passwordexpirationtime">http://schemas.microsoft.com/ws/2012/01/passwordexpirationtime</a>"]</em></p>
<p><em>=&gt; issue(store = "_PasswordExpiryStore", types = ("<a href="http://schemas.microsoft.com/ws/2012/01/passwordexpirationtime">http://schemas.microsoft.com/ws/2012/01/passwordexpirationtime</a>", "<a href="http://schemas.microsoft.com/ws/2012/01/passwordexpirationdays">http://schemas.microsoft.com/ws/2012/01/passwordexpirationdays</a>", "<a href="http://schemas.microsoft.com/ws/2012/01/passwordchangeurl">http://schemas.microsoft.com/ws/2012/01/passwordchangeurl</a>"), query = "{0};", param = c1.Value);</em></p>
<p>With the above rule we are sending 3 additional claims</p>
<ul>
<li><em>Password Expiration Time:</em> This is the time when the user&rsquo;s password will expire</li>
<li><em>Password Expiration Days:</em> This is the number of days remaining prior to the password expiry</li>
<li><em>Password Change URL:</em> This is the URL of the password change URL from ADFS</li>
</ul>
<p>&nbsp;</p>
<p>Hope you found this blog post useful. Feel free to post comments on this blog post to ask questions or leave feedback. You can also tweet to @MrADFS.</p>
<p>--Sam</p>]]></content:encoded>
    </item>
  </channel>
</rss>