<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>David McWee</title>
	<atom:link href="https://davidmcwee.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://davidmcwee.com</link>
	<description>Security that works together, Works.</description>
	<lastBuildDate>Tue, 25 Jan 2022 18:06:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='davidmcwee.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s0.wp.com/i/buttonw-com.png</url>
		<title>David McWee</title>
		<link>https://davidmcwee.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://davidmcwee.com/osd.xml" title="David McWee" />
	<atom:link rel='hub' href='https://davidmcwee.com/?pushpress=hub'/>
	<item>
		<title>AV Exclusion Help</title>
		<link>https://davidmcwee.com/2022/01/25/av-exclusion-help/</link>
					<comments>https://davidmcwee.com/2022/01/25/av-exclusion-help/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Tue, 25 Jan 2022 18:06:23 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1983</guid>

					<description><![CDATA[Help page for the AV Exclusion (AVEX) Analyzer tool.]]></description>
										<content:encoded><![CDATA[
<p>Help page for the AV Exclusion (AVEX) Analyzer tool.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2022/01/25/av-exclusion-help/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>Defender for Endpoint Upgrade Script &#8211; FOR ALL!</title>
		<link>https://davidmcwee.com/2021/11/11/defender-for-endpoint-upgrade-script-for-all/</link>
					<comments>https://davidmcwee.com/2021/11/11/defender-for-endpoint-upgrade-script-for-all/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Thu, 11 Nov 2021 17:18:55 +0000</pubDate>
				<category><![CDATA[Defender for Endpoint]]></category>
		<category><![CDATA[MDE]]></category>
		<category><![CDATA[Microsoft]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1961</guid>

					<description><![CDATA[Working with a customer on the MDE Unified Installer for Windows Server 2016/2012R2 we ran into the issue that SCEP was installed and thus blocking the Unified Installer. Therefore, instead of the Install approach we really needed to perform an Upgrade, but would that mean we needed an approach for servers where SCEP had been [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Working with a customer on the MDE Unified Installer for Windows Server 2016/2012R2 we ran into the issue that SCEP was installed and thus blocking the Unified Installer.  Therefore, instead of the Install approach we really needed to perform an Upgrade, but would that mean we needed an approach for servers where SCEP had been installed vs. servers where SCEP was not installed?  Answer: No!</p>



<h2 id="mde-unified-installer-upgrade-script">MDE Unified Installer Upgrade Script</h2>



<p>Microsoft has already published the <a href="https://github.com/microsoft/mdefordownlevelserver">Unified Installer Upgrade Script</a> which allows organizations to move from the SCEP + MMA MDE approach to using the Unified Installer (which includes a number or extra capabilities). However, what is the necessary configuration of scripts, installers, etc. and is it only useful for upgrading is a bit vague so I&#8217;ll cover that below.</p>



<h2 id="what-does-the-script-do">What does the script do?</h2>



<p>The upgrade script takes a few actions, starting with removing the OMS Workspace and Workspace ID (Lines 220-236 of the script)&#8230;assuming you provide it.  If you don&#8217;t use the RemoveMMA parameter no change will occur with MMA, so you could in theory end up reporting twice about the device (Note: I have not tested this scenario as I think you should remove the OMS information from MMA when moving to the Unified Agent).</p>



<p>Next, the script checks the registry to determine if the SCEP client was installed (Lines 253-267) and performs an Uninstall of SCEP.  On line 257 the script assumes that the installer/uninstaller for SCEP is located in the standard Program Files path, so a custom install path for SCEP may cause issues (Note: I have not tested to verify this).</p>



<p>For Server 2012R2 instances the script ensures that two hotfixes (KB2999226 and KB3080149) have been applied and if not applies the Hotfixes (Lines 269-327).</p>



<p>Now that the server is ready to have the unified agent installed the script executes a quite MSI (no UI) install of the agent.</p>



<p>Finally, if the OnboardingScript parameter is provided, the upgrade script will execute the onboarding script (.cmd file) that is used in standard Windows 10, Server 2019 Onboarding GPO and the device will onboard to MDE.</p>



<h2 id="considerations-for-using-the-upgrade-script">Considerations for using the Upgrade Script</h2>



<p>Like the onboarding script used by Windows 10, 11, and Server 2019 the upgrade script (install.ps1) needs to be in a location where all of the machines that will use it can read it. I recommend following the same guidance for the upgrade script as outlined <a href="https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-endpoints-gp?view=o365-worldwide">here </a>in Step 2 that is provided for the Onboarding Script. I would also recommend you consider storing the upgrade script in the same location as the onboarding script.</p>



<p>As detailed in the above section there are several parameters (RemoveMMA, OnboardingScript) that control how the upgrade script executes, but one important consideration was overlooked: the location of the Unified Agent&#8217;s MSI file. Currently, the Unified Agent&#8217;s MSI is assumed to be stored in the same location ($PSScriptRoot) as the upgrade script (ref Lines 99-105). Therefore, when you are setting up your shares a file locations be sure to locate the md4ws.msi in the SAME folder as the install.ps1 script!</p>



<p>If you have any servers that have a configured MMA agent, include the RemoveMMA parameter to ensure that MMA and the Unified Agent are not trying to report the same/similar information to MDE.  If the server is not running MMA, or is not reporting to the workspace the script will detect this and skip removing the workspace.  If the MMA agent is reporting to OMS and MDE only the MDE workspace will be removed.</p>



<p>Use the OnboardingScript parameter! Although you could chain the upgrade script with the onboarding script I don&#8217;t see a driving value for doing this.  Using the OnboardingScript parameter will cause the immediate onboarding of the device, so you don&#8217;t need to worry about applying multiple GPOs or chaining GPO tasks, the script handles the right actions at the right time.</p>



<p>Finally, because you are running a Powershell script be mindful of execution policy that may be set on your Servers.  Although the script is signed when I did initial testing I found that my execution policy was too restrictive to allow the script to run successfully.</p>



<h2 id="example-gpo">Example GPO</h2>



<p>I created a GPO exactly like the directions for <a href="https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-endpoints-gp?view=o365-worldwide">Windows 10/11 or Server 2019</a> for use with the upgrade script (Immediate Task, Runs as System, Run with highest privileges, etc.).</p>



<p>For the Task itself the command I used was:</p>



<pre class="wp-block-preformatted">Program/Script: Powershell
Arguments: -ExecutionPolicy Bypass \\sharelocation\install.ps1 -OnboardingScript \\sharelocation\WindowsDefenderATPOnboardingScript.cmd -RemoveMMA MMA-MDE-Workspace-Guid</pre>



<p>You can refer to my <a href="https://davidmcwee.com/2021/11/01/defender-for-endpoint-unified-package-for-server-2016-and-2012-r2/">previous post about using a WMI Filter</a> to target deployment to only Server 2012R2 and 2016 instances if your servers aren&#8217;t segmented into different OUs.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2021/11/11/defender-for-endpoint-upgrade-script-for-all/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>Defender for Endpoint Unified Package for Server 2016 and 2012 R2</title>
		<link>https://davidmcwee.com/2021/11/01/defender-for-endpoint-unified-package-for-server-2016-and-2012-r2/</link>
					<comments>https://davidmcwee.com/2021/11/01/defender-for-endpoint-unified-package-for-server-2016-and-2012-r2/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Mon, 01 Nov 2021 20:40:29 +0000</pubDate>
				<category><![CDATA[Defender for Endpoint]]></category>
		<category><![CDATA[MDE]]></category>
		<category><![CDATA[Microsoft]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1955</guid>

					<description><![CDATA[Recently Microsoft announced the public preview of a unified EPP and EDR package that allows a similar onboarding approach for these servers as Server 2019, Windows 10, and Windows 11. Recently, a customer I support wanted to test this new method and perform deployment using the GPO methodology. The documentation for how to set up [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Recently Microsoft <a href="https://techcommunity.microsoft.com/t5/microsoft-defender-for-endpoint/defending-windows-server-2012-r2-and-2016/ba-p/2783292">announced the public preview of a unified EPP and EDR</a> package that allows a similar onboarding approach for these servers as Server 2019, Windows 10, and Windows 11. Recently, a customer I support wanted to test this new method and perform deployment using the GPO methodology.</p>



<p>The documentation for how to set up and configure the GPO is available <a href="https://docs.microsoft.com/en-us/microsoft-365/security/defender-endpoint/configure-server-endpoints?view=o365-worldwide#windows-server-2012-r2-and-windows-server-2016">here</a> and provides a great step-by-step guide. However, the guide only addresses linking the GPO to an OU, but for many customers having an OU per Server Version isn&#8217;t likely. This customer did have their servers were grouped into a couple of OUs, but not by OS version, so we needed to find a WMI Query that would target the correct set of machines.</p>



<p>Below is the WMI Filter for Server 2016 and 2012R2 that I was able to derive using resources listed below.  I don&#8217;t claim this is perfect, but hopefully it is a good starting point for others.</p>



<pre class="wp-block-preformatted">Select * from Win32_OperatingSystem Where (Version like "10.0.14%" or Version like "6.3.96%") and ProductType="3"</pre>



<h2 id="useful-resources">Useful Resources</h2>



<p>Wikipedia has a fantastic <a href="https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions">Windows Operating System list</a> that covers both User and Server OS&#8217;s. The Version Number column makes up the first two place values of the WMI Operating System&#8217;s Version value.  The Latest Build column makes up the final, third, segment of the WMI Operating System&#8217;s Version value. However, when you get to the Windows 10 core OS&#8217;s, Server 2016 and higher, only build numbers are listed in the Version Number column.  You should refer to the WMI object that is returned by your machine, but in this scenario all of the OS&#8217;s (2012R2 and 2016) both use the 10.0 start to their version numbers.</p>



<p><a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-wmiobject?view=powershell-5.1">Get-WmiObject</a> was a key PowerShell command because it allowed for testing of parts of the WMI filter on the machines.  In this scenario because we were working from Windows Versions the WMI Object we needed was Win32_OperatingSystem so the following command allowed for quick review of the WMI object</p>



<pre class="wp-block-preformatted">Get-WmiObject Win32_OperatingSystem</pre>



<p>Adding the <strong>-Filter</strong> parameter allows for testing of the Where portion of the WMI Filter.  If the filter matches the current machine then the WMI Object is returned, and if the filter fails to match then a Null result is returned.</p>



<pre class="wp-block-preformatted">Get-WmiObject Win32_OperatingSystem "(Version like '10.0.14%' or Version like '6.3.96%') and ProductType='3'"</pre>



<p>Finally, using the <a href="https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-firewall/create-wmi-filters-for-the-gpo#to-create-a-wmi-filter-that-queries-for-a-specified-version-of-windows">WMI Filter documentation</a> to target End User OS vs. Server OS vs. AD Servers allowed us to avoid the overlap with End User OS&#8217;s and avoid automatic deployment on Domain Controllers.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2021/11/01/defender-for-endpoint-unified-package-for-server-2016-and-2012-r2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>Automate Accounts for Azure AD</title>
		<link>https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/</link>
					<comments>https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Thu, 18 Jul 2019 20:43:32 +0000</pubDate>
				<category><![CDATA[Azure Active Directory (AAD)]]></category>
		<category><![CDATA[Security & Identity]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online (SPO)]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Forms]]></category>
		<category><![CDATA[Microsoft]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1852</guid>

					<description><![CDATA[Azure AD&#8217;s B2B capability is a really powerful way to leverage identities from outside of an organization, but is it the right solution for seasonal, temporary, or white listed employees?  Maybe, maybe not, and if not then the creation of cloud only accounts may require a time consuming (possibly manual) request &#62; approval &#62; provision [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Azure AD&#8217;s B2B capability is a really powerful way to leverage identities from outside of an organization, but is it the right solution for seasonal, temporary, or white listed employees?  Maybe, maybe not, and if not then the creation of cloud only accounts may require a time consuming (possibly manual) request &gt; approval &gt; provision process.</p>
<p>Recently I had a customer that asked how we could automate an account provisioning processes that allow for a request, an approval workflow, automated account provisioning, association of the account with a &#8216;manager&#8217;, an automated actions if the &#8216;manager&#8217; departed, and time boxing of the account.  In order to minimize development and utilize as much Out of the Box as I could I turned to Flow.</p>
<h1>Start with SharePoint</h1>
<blockquote><p>So this is the benefit of experience: I actually started with Flow and discovered the template for Flow, SharePoint, and Azure AD.  Because I started with Flow I didn&#8217;t think about what data I wanted to capture first, I just wanted to get accounts creating and would add fields as I needed them.  This lead to some issues, probably because I&#8217;m impatient, between adding field and having those available in Flow.  Therefore, I recommend YOU think about the information you need to capture from a user, build your SharePoint list and then proceed.</p></blockquote>
<p>I decided that I would create a new site for tracking requests and host my request list in this location.  In a real world environment this would allow an organization to have a single account request location which I viewed as valuable.</p>
<p>I created a list as shown below (<em>Title</em> will be used as the last name)</p>
<p><img loading="lazy" data-attachment-id="1854" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/sp-list/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/sp-list.png" data-orig-size="2256,372" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SP List" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/sp-list.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/sp-list.png?w=620" class="alignnone size-full wp-image-1854" src="https://dmcwee.files.wordpress.com/2019/07/sp-list.png" alt="SP List" width="2256" height="372" srcset="https://dmcwee.files.wordpress.com/2019/07/sp-list.png 2256w, https://dmcwee.files.wordpress.com/2019/07/sp-list.png?w=150&amp;h=25 150w, https://dmcwee.files.wordpress.com/2019/07/sp-list.png?w=300&amp;h=49 300w, https://dmcwee.files.wordpress.com/2019/07/sp-list.png?w=768&amp;h=127 768w, https://dmcwee.files.wordpress.com/2019/07/sp-list.png?w=1024&amp;h=169 1024w" sizes="(max-width: 2256px) 100vw, 2256px" /></p>
<p>All fields are <em>Single Line of Text</em> except for <em>Review Status</em> which is a <em>Choice</em> field with <em>Pending, Approved, Rejected</em> as the options with <em>Pending</em> as the Default value.</p>
<h1>Create your workflow with Flow</h1>
<p>I am by no means a Flow expert, thanks to this demo I learned a little bit, but I really needed a simple place to start.  Fortunately, if you go to <em>Flow</em> select <em>Templates</em> and <em>Search</em> for <em>Azure AD</em> the second template is <em>Create Azure AD User from SharePoint List</em>.</p>
<p><img loading="lazy" data-attachment-id="1853" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-templates/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-templates.png" data-orig-size="1794,1058" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Templates" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-templates.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-templates.png?w=620" class="alignnone size-full wp-image-1853" src="https://dmcwee.files.wordpress.com/2019/07/flow-templates.png" alt="Flow Templates" width="1794" height="1058" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-templates.png 1794w, https://dmcwee.files.wordpress.com/2019/07/flow-templates.png?w=150&amp;h=88 150w, https://dmcwee.files.wordpress.com/2019/07/flow-templates.png?w=300&amp;h=177 300w, https://dmcwee.files.wordpress.com/2019/07/flow-templates.png?w=768&amp;h=453 768w, https://dmcwee.files.wordpress.com/2019/07/flow-templates.png?w=1024&amp;h=604 1024w" sizes="(max-width: 1794px) 100vw, 1794px" /></p>
<p>Once the flow is generated you need to update the first action with your SharePoint site Url and list name.</p>
<p><img loading="lazy" data-attachment-id="1855" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-item-created/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png" data-orig-size="1236,360" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Item Created" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png?w=620" class="alignnone size-full wp-image-1855" src="https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png" alt="Flow Item Created" width="1236" height="360" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png 1236w, https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png?w=150&amp;h=44 150w, https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png?w=300&amp;h=87 300w, https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png?w=768&amp;h=224 768w, https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png?w=1024&amp;h=298 1024w" sizes="(max-width: 1236px) 100vw, 1236px" /></p>
<p>You can skip the second action as this will generate a random password for the account.</p>
<p>Next, you need to update the <em>Create User</em> step based on the fields you created in your list.  You can also use Expressions to customize the values you want to use when creating the user.  For example I use the following to create a username:</p>
<pre>concat(triggerbody()['FirstName'], '.', triggerbody()['Title'], '@mydomain.com')</pre>
<p><img loading="lazy" data-attachment-id="1856" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-create-user/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png" data-orig-size="1226,1200" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Create User" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png?w=620" class="alignnone size-full wp-image-1856" src="https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png" alt="Flow Create User" width="1226" height="1200" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png 1226w, https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png?w=150&amp;h=147 150w, https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png?w=300&amp;h=294 300w, https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png?w=768&amp;h=752 768w, https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png?w=1024&amp;h=1002 1024w" sizes="(max-width: 1226px) 100vw, 1226px" /> You will also notice that I&#8217;ve clicked on the <em>Show advanced options</em> and updated the <em>Business Phone</em>, <em>Department</em>, <em>Job Title</em>, <em>Mobile Phone</em>, <em>Office Location</em>, and <em>Preferred Language</em>.</p>
<blockquote><p>Account creation will fail if Preferred Language does not meet the specific format.  Business Phone can be an empty array, but cannot accept a null value.<br />
eg. [] &#8211; ok<br />
[null] &#8211; failure</p></blockquote>
<p>Next, update the <em>Update item</em> action to set the current item&#8217;s <em>ReviewStatus</em> value to <em>Approved</em>.  You will also notice the <em>IsComplete</em> field with a value of <em>true</em>, this field needs to be added to your SharePoint list or else the <em>Update item</em> action will fail.</p>
<p><img loading="lazy" data-attachment-id="1857" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-update-item/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png" data-orig-size="1242,894" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Update Item" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png?w=620" class="alignnone size-full wp-image-1857" src="https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png" alt="Flow Update Item.png" width="1242" height="894" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png 1242w, https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png?w=150&amp;h=108 150w, https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png?w=300&amp;h=216 300w, https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png?w=768&amp;h=553 768w, https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png?w=1024&amp;h=737 1024w" sizes="(max-width: 1242px) 100vw, 1242px" /></p>
<p>Finally, update the <em>Send an email</em> action to utilize the values captured from the list.</p>
<p><img loading="lazy" data-attachment-id="1858" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-send-email/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png" data-orig-size="1236,476" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Send Email" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png?w=620" class="alignnone size-full wp-image-1858" src="https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png" alt="Flow Send Email.png" width="1236" height="476" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png 1236w, https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png?w=150&amp;h=58 150w, https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png?w=300&amp;h=116 300w, https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png?w=768&amp;h=296 768w, https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png?w=1024&amp;h=394 1024w" sizes="(max-width: 1236px) 100vw, 1236px" /></p>
<p>Now you should be able to test you Flow by creating an item in the SharePoint list and observe the execution of your flow, and if there are errors then you can perform troubleshooting and resubmit.</p>
<p><img loading="lazy" data-attachment-id="1859" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-runs/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-runs.png" data-orig-size="1806,508" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Runs" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-runs.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-runs.png?w=620" class="alignnone size-full wp-image-1859" src="https://dmcwee.files.wordpress.com/2019/07/flow-runs.png" alt="Flow Runs" width="1806" height="508" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-runs.png 1806w, https://dmcwee.files.wordpress.com/2019/07/flow-runs.png?w=150&amp;h=42 150w, https://dmcwee.files.wordpress.com/2019/07/flow-runs.png?w=300&amp;h=84 300w, https://dmcwee.files.wordpress.com/2019/07/flow-runs.png?w=768&amp;h=216 768w, https://dmcwee.files.wordpress.com/2019/07/flow-runs.png?w=1024&amp;h=288 1024w" sizes="(max-width: 1806px) 100vw, 1806px" /></p>
<h1>Add the Review</h1>
<p>Now that the creation process is working update the flow to include the actual review phase and condition handling. <span style="color:var(--color-text);">Add the <em>Start and wait for an approval (v2)</em> action to your flow AFTER the <em>Initialize variable</em> step and configure it as shown.</span></p>
<blockquote><p>The Initialize Variable cannot happen within the Condition portion of the workflow, so you may as well initialize this immediately after the flow starts.</p></blockquote>
<p><img loading="lazy" data-attachment-id="1860" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-wait-for-approval/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png" data-orig-size="1226,624" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Wait for Approval" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png?w=620" class="alignnone size-full wp-image-1860" src="https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png" alt="Flow Wait for Approval" width="1226" height="624" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png 1226w, https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png?w=150&amp;h=76 150w, https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png?w=300&amp;h=153 300w, https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png?w=768&amp;h=391 768w, https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png?w=1024&amp;h=521 1024w" sizes="(max-width: 1226px) 100vw, 1226px" /></p>
<p>Next, add a <em>Condition</em> action to your flow.  Update the <em>Condition</em> to use the <em>Outcome</em> of the <em>Start and wait for an approval</em> outcome to be equal to <em>&#8216;Approve&#8217;</em>.</p>
<p><img loading="lazy" data-attachment-id="1861" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-condition/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-condition.png" data-orig-size="1228,346" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Condition" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-condition.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-condition.png?w=620" class="alignnone size-full wp-image-1861" src="https://dmcwee.files.wordpress.com/2019/07/flow-condition.png" alt="Flow Condition" width="1228" height="346" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-condition.png 1228w, https://dmcwee.files.wordpress.com/2019/07/flow-condition.png?w=150&amp;h=42 150w, https://dmcwee.files.wordpress.com/2019/07/flow-condition.png?w=300&amp;h=85 300w, https://dmcwee.files.wordpress.com/2019/07/flow-condition.png?w=768&amp;h=216 768w, https://dmcwee.files.wordpress.com/2019/07/flow-condition.png?w=1024&amp;h=289 1024w" sizes="(max-width: 1228px) 100vw, 1228px" /></p>
<p>Finally, move (yes drag and drop does work) the <em>Create User</em>, <em>Update Item</em>, and <em>Send an email</em> actions into the <em>If yes</em> segment of the workflow. You should also add a <em>Send an email</em> to the <em>If no</em> segment of the workflow and send the user a notification that their request has been rejected.</p>
<p><img loading="lazy" data-attachment-id="1862" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/flow-condition-branches/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png" data-orig-size="2588,904" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Flow Condition Branches" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png?w=620" class="alignnone size-full wp-image-1862" src="https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png" alt="Flow Condition Branches" width="2588" height="904" srcset="https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png 2588w, https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png?w=150&amp;h=52 150w, https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png?w=300&amp;h=105 300w, https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png?w=768&amp;h=268 768w, https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png?w=1024&amp;h=358 1024w" sizes="(max-width: 2588px) 100vw, 2588px" /></p>
<blockquote><p>I recommend testing again to make sure your approval process works as expected, and be sure to test both the Approve and Reject.</p></blockquote>
<h1>Collect Requests with Forms</h1>
<p>Now that our flow works we need to set up a way for people to submit requests to be reviewed and approved/rejected.  Microsoft Forms is a simple way to create the request form you need and allow it to be shared outside of your organization.</p>
<p>Creating a Form is really easy so I won&#8217;t provide the full details, but create a new Form that captures the same information that the SharePoint list stores.  Don&#8217;t include the workflow type fields like <em>Approval status</em> and <em>IsComplete</em> field of course.  Here is an example of the Form I created.</p>
<p><img loading="lazy" data-attachment-id="1863" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/form-example/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/form-example.png" data-orig-size="786,1520" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Form Example" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/form-example.png?w=155" data-large-file="https://dmcwee.files.wordpress.com/2019/07/form-example.png?w=530" class="alignnone  wp-image-1863" src="https://dmcwee.files.wordpress.com/2019/07/form-example.png" alt="Form Example" width="268" height="519" srcset="https://dmcwee.files.wordpress.com/2019/07/form-example.png?w=268&amp;h=519 268w, https://dmcwee.files.wordpress.com/2019/07/form-example.png?w=536&amp;h=1038 536w, https://dmcwee.files.wordpress.com/2019/07/form-example.png?w=78&amp;h=150 78w, https://dmcwee.files.wordpress.com/2019/07/form-example.png?w=155&amp;h=300 155w" sizes="(max-width: 268px) 100vw, 268px" /></p>
<p>As you can see I provided friendly names for each of the user input fields and marked everything as required.</p>
<p>Now you need to allow this Form to be accessed by anyone with the link.  To do this click on the <em>Share</em> button in the upper right of the browser window and select the <em>Anyone with the link can respond</em>.  This will allow you to copy the URL and send it to any external participants.</p>
<p><img loading="lazy" data-attachment-id="1864" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/form-share/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/form-share.png" data-orig-size="906,1192" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Form Share" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=228" data-large-file="https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=620" class="alignnone  wp-image-1864" src="https://dmcwee.files.wordpress.com/2019/07/form-share.png" alt="Form Share" width="419" height="552" srcset="https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=419&amp;h=552 419w, https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=838&amp;h=1104 838w, https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=114&amp;h=150 114w, https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=228&amp;h=300 228w, https://dmcwee.files.wordpress.com/2019/07/form-share.png?w=768&amp;h=1010 768w" sizes="(max-width: 419px) 100vw, 419px" /></p>
<h1>Tie this all together</h1>
<p>The final part is to pull our Form submission into our SharePoint list, and again we go back to Flow for this and use an existing Template.</p>
<p><img loading="lazy" data-attachment-id="1865" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/form-flow/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/form-flow.png" data-orig-size="1224,990" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Form Flow" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/form-flow.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/form-flow.png?w=620" class="alignnone size-full wp-image-1865" src="https://dmcwee.files.wordpress.com/2019/07/form-flow.png" alt="Form Flow" width="1224" height="990" srcset="https://dmcwee.files.wordpress.com/2019/07/form-flow.png 1224w, https://dmcwee.files.wordpress.com/2019/07/form-flow.png?w=150&amp;h=121 150w, https://dmcwee.files.wordpress.com/2019/07/form-flow.png?w=300&amp;h=243 300w, https://dmcwee.files.wordpress.com/2019/07/form-flow.png?w=768&amp;h=621 768w, https://dmcwee.files.wordpress.com/2019/07/form-flow.png?w=1024&amp;h=828 1024w" sizes="(max-width: 1224px) 100vw, 1224px" /></p>
<p>After creating the new Flow from the Template you need to customize the <em>When a new response is submitted</em> Action and select the form you just created.</p>
<p><img loading="lazy" data-attachment-id="1866" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/form-flow-new-response/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png" data-orig-size="1124,256" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Form Flow New Response" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png?w=620" class="alignnone size-full wp-image-1866" src="https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png" alt="Form Flow New Response" width="1124" height="256" srcset="https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png 1124w, https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png?w=150&amp;h=34 150w, https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png?w=300&amp;h=68 300w, https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png?w=768&amp;h=175 768w, https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png?w=1024&amp;h=233 1024w" sizes="(max-width: 1124px) 100vw, 1124px" /></p>
<p>In the <em>Apply to each</em> action update the <em>Get response details</em> and select the form you created.</p>
<p><img loading="lazy" data-attachment-id="1867" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/form-get-response-details/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png" data-orig-size="1126,688" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Form Get response details" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png?w=620" class="alignnone size-full wp-image-1867" src="https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png" alt="Form Get response details.png" width="1126" height="688" srcset="https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png 1126w, https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png?w=150&amp;h=92 150w, https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png?w=300&amp;h=183 300w, https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png?w=768&amp;h=469 768w, https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png?w=1024&amp;h=626 1024w" sizes="(max-width: 1126px) 100vw, 1126px" /></p>
<p>Finally, update the <em>Create item</em> by selecting the <em>Site Address</em> and <em>List Name</em>, then expand the <em>Advanced Options</em> so that all the fields from your list display.</p>
<p><img loading="lazy" data-attachment-id="1868" data-permalink="https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/form-create-item/" data-orig-file="https://dmcwee.files.wordpress.com/2019/07/form-create-item.png" data-orig-size="1070,1242" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Form Create Item" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/07/form-create-item.png?w=258" data-large-file="https://dmcwee.files.wordpress.com/2019/07/form-create-item.png?w=620" class="alignnone size-full wp-image-1868" src="https://dmcwee.files.wordpress.com/2019/07/form-create-item.png" alt="Form Create Item" width="1070" height="1242" srcset="https://dmcwee.files.wordpress.com/2019/07/form-create-item.png 1070w, https://dmcwee.files.wordpress.com/2019/07/form-create-item.png?w=129&amp;h=150 129w, https://dmcwee.files.wordpress.com/2019/07/form-create-item.png?w=258&amp;h=300 258w, https://dmcwee.files.wordpress.com/2019/07/form-create-item.png?w=768&amp;h=891 768w, https://dmcwee.files.wordpress.com/2019/07/form-create-item.png?w=882&amp;h=1024 882w" sizes="(max-width: 1070px) 100vw, 1070px" /></p>
<p>Save your flow, and go test your solution from Flow to Account Creation.</p>
<h1>Wrapping Up</h1>
<p>You should now be able to share your Form with people outside of your organization, have them submit the form, record the entry in SharePoint and have the Approval process kick off and the account creation be performed.</p>
<blockquote><p>There are lots of Flow templates and clearly the Approval process doesn&#8217;t specifically require SharePoint to store the item, so there are probably hundreds of ways to approach this problem.  However, I like this method because I can see the data move from Forms to SharePoint to Azure AD and creating tracking and report solutions are easy.</p></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2019/07/18/automate-accounts-for-azure-ad/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/sp-list.png" medium="image">
			<media:title type="html">SP List</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-templates.png" medium="image">
			<media:title type="html">Flow Templates</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-item-created.png" medium="image">
			<media:title type="html">Flow Item Created</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-create-user.png" medium="image">
			<media:title type="html">Flow Create User</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-update-item.png" medium="image">
			<media:title type="html">Flow Update Item.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-send-email.png" medium="image">
			<media:title type="html">Flow Send Email.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-runs.png" medium="image">
			<media:title type="html">Flow Runs</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-wait-for-approval.png" medium="image">
			<media:title type="html">Flow Wait for Approval</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-condition.png" medium="image">
			<media:title type="html">Flow Condition</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/flow-condition-branches.png" medium="image">
			<media:title type="html">Flow Condition Branches</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/form-example.png" medium="image">
			<media:title type="html">Form Example</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/form-share.png" medium="image">
			<media:title type="html">Form Share</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/form-flow.png" medium="image">
			<media:title type="html">Form Flow</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/form-flow-new-response.png" medium="image">
			<media:title type="html">Form Flow New Response</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/form-get-response-details.png" medium="image">
			<media:title type="html">Form Get response details.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/07/form-create-item.png" medium="image">
			<media:title type="html">Form Create Item</media:title>
		</media:content>
	</item>
		<item>
		<title>Incorporate Azure AD with your Angular App</title>
		<link>https://davidmcwee.com/2019/06/14/incorporate-azure-ad-with-your-angular-app/</link>
					<comments>https://davidmcwee.com/2019/06/14/incorporate-azure-ad-with-your-angular-app/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Fri, 14 Jun 2019 20:06:51 +0000</pubDate>
				<category><![CDATA[Angular]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Active Directory (AAD)]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Typescript]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1599</guid>

					<description><![CDATA[I began my career as a software developer and I still love the opportunity to tinker with code from time to time.  Since I usually deal with authentication and identity I have a need from time to time to demonstrate how customers can add their own custom applications to Azure AD and how the protections [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I began my career as a software developer and I still love the opportunity to tinker with code from time to time.  Since I usually deal with authentication and identity I have a need from time to time to demonstrate how customers can add their own custom applications to Azure AD and how the protections can be applied.  So, I spent a few days recently building and testing my own, single page, custom application based on the latest version of Angular (Typescript).</p>
<p>While I could detail what I did to get the project working, it is probably easier to provide the various links I used to learn Angular as well as the libraries I used and added to get the project working.</p>
<h1>Getting Going</h1>
<p>Since I had ZERO experience with Typescript and the latest TS Angular I started with the <a href="https://angular.io/tutorial">Tour of Heroes tutorial</a>.</p>
<p>Second, I was able to find the Angular-MSAL library available <a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular">here on Github</a>.  I recommend going here so you can read the friendly documentation, but use &#8216;npm install @azure/msal-angular&#8217; to add this to your development project.</p>
<p>Third, I followed <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-javascript-spa#register-your-application">these directions</a> to register my application in Azure AD.</p>
<p>Finally, I used the sample application <a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular/samples/MSALAngularDemoApp">found here</a> to make my application.  This is where I found the most trouble so below I&#8217;ll focus on some of the issues I had.</p>
<h1>Issues I Had</h1>
<p>The first issue I ran into was that every time I logged in I would get an error about lacking some api permissions.  Searching for the error didn&#8217;t provide really relevant information so I started to eliminate as much as I could.  What I discovered was that during the  LoginPopup call the Sample code I copied and pased into my app include &#8216;api://a88bb933-319c-41b5-9f04-eff36d985612/access_as_user&#8217; which is unnecessary for Login and user queries so I removed it.</p>
<p>The second issue I ran into was that the MsalService.getAllUsers() only returned my local user&#8217;s information, which is actually documented, but I wanted that ability.  Instead I had to call directly against the Graph services to get that information which you can find <a href="https://github.com/dmcwee/msaldemo/blob/master/src/app/userlist/userlist.service.ts">my solution here</a>.</p>
<h1>My App</h1>
<p>If you are interested <a href="https://github.com/dmcwee/msaldemo">here is the app I created</a>.  Yes there are still some issues which I&#8217;m working on, but it may be an easier starting point for others.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2019/06/14/incorporate-azure-ad-with-your-angular-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>The Identity stupid!</title>
		<link>https://davidmcwee.com/2019/04/02/the-identity-stupid/</link>
					<comments>https://davidmcwee.com/2019/04/02/the-identity-stupid/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Tue, 02 Apr 2019 13:51:15 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Active Directory (AAD)]]></category>
		<category><![CDATA[Security & Identity]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1426</guid>

					<description><![CDATA[James Carville&#8217;s campaign strategy for Bill Clinton&#8217;s &#8217;92 campaign was &#8220;The economy, stupid!&#8221; These 3 words left no doubt to what was important, what to focus on, and the fact that getting the Economy right would make everything else possible.  Today, as we look at changes to the corporate IT network and infrastructure we should [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>James Carville&#8217;s campaign strategy for Bill Clinton&#8217;s &#8217;92 campaign was <strong>&#8220;The economy, stupid!&#8221;</strong> These 3 words left no doubt to what was important, what to focus on, and the fact that getting the Economy right would make everything else possible.  Today, as we look at changes to the corporate IT network and infrastructure we should adopt a similar slogan:</p>
<h2>The Identity, stupid!</h2>
<p>Identity is a core enabler of modern solutions be they Collaboration, Security, from IaaS to PaaS.  Companies in the past could rely on physical controls to secure information, but today Cloud and the interconnectedness of businesses has destroyed those controls. So where does this leave us in a world where we don&#8217;t control where information is accessed from, by what devices, or where the information is stored? We are left with one truth, unique to everyone and applicable to devices and data: Identity.</p>
<p>The funny think is, we&#8217;ve known identity has been important for a long time. If you ever took a class on journalism the first thing they taught was the mantra &#8220;<strong>Who</strong>, What, When, Where, Why.&#8221; When you log into your computer today the first thing it asks you is: <strong>Who</strong> are you? When you go to buy a car, boat, or house you have to tell them is <strong>who</strong> you are.  You even have to tell the barista at Starbucks <strong>who</strong> you are!</p>
<h1>Identity is important, so protect it!</h1>
<p>Identity is the control mechanism today for enabling technology, if you secure the identity you&#8217;ve gone a long way to securing your systems and your data.  Here are some methods to improve your organization&#8217;s identity strength without hampering their ability to do work.</p>
<h2>Update your password policy</h2>
<p>Recently even <a href="https://pages.nist.gov/800-63-3/sp800-63b.html">NIST updated their password policy</a> (Section 5.1.1.2) to reduce the artificial complexity rules, changes passwords only when suspected of compromise, and perform checks against &#8216;dirty words&#8217; and previously compromised passwords. At Microsoft the use of &#8216;Seattle&#8217;, and &#8216;Seahawks&#8217; are rumored to be banned (I wouldn&#8217;t know because I don&#8217;t live in Seattle and I&#8217;m not a Seahawks fan).</p>
<p>Beyond these recommendations think Passphrase not Password.  The longer the password the more difficult it is to guess so brute force and dictionary attacks are less likely to be successful.</p>
<p>All of these policies are easy to implement, prohibited words/phrases, detection of compromised passwords, and password length controls, and even self service password resets are built into Azure Active Directory.  Azure Active Directory can become the central hub for password management with the ability to synchronization changes to your on-premise systems.</p>
<h2>Enable MFA</h2>
<p>I wrote about this in another <a href="https://davidmcwee.com/2018/12/04/o365-mfa-vs-azure-ad-mfa/">post</a>, but seriously if you have any admin accounts that don&#8217;t have MFA enabled stop reading this and go GO TURN IT ON NOW!</p>
<p>MFA is one of the simplest solutions to interrupt account compromises, and it has become more common for users because it is used in Banking Apps, Commercial Email, and even Facebook recommends your account be protected with MFA.  At Microsoft we see a decrease in account compromises by over 99%.  Clearly, this is the first step in enhancing the security of your identities.  This is already included in O365 E3 or Azure Premium licenses and enabling it is just a few checkboxes, so there really is NO EXCUSE!</p>
<h2>Use data</h2>
<p>Monitoring accounts is critical, but there is a lot of information about what is happening in the world, like Dark Web sale of Credentials, that may not show up in your organization&#8217;s monitoring of accounts. However, a service like Azure Active Directory which is used by millions of user accounts daily gets lots of insight not only about your accounts but from all accounts, so when an attack is detected everywhere everyone can benefit from awareness and steps taken to block this type of attack.</p>
<h2>Use AI and ML</h2>
<p>Along with information about what is happening globally around authentications, it is also important to understand what is &#8216;normal&#8217; and what is &#8216;abnormal&#8217; for your users.  If users sign in Monday-Friday between 9am and 5pm for 15 years then your identity system should recognize that a sign in on Saturday at 2:30am is abnormal.  In this scenario the system may require extra identity validation (MFA), block the login attempt, or alert your other security monitoring tools and personnel.  This capability is part of the Azure Active Directory Conditional Access which natively learns user behavior patters and can dynamically adapt the authentication experience based on user behavior patterns.</p>
<h2>Change Written Policy to Automated Action</h2>
<p>If you want to protect identities, really if you want to protect anything these days, then you need to take written policies and automate them in your identity system.  A written policy like &#8220;If a password is compromised require a user to change it&#8221; requires a user to be notified and then for them to take action.  Instead, your Identity tools should be able to detect the credential compromise and require a password reset (with MFA validation) on the next login attempt.  In Azure Active Directory this can be done with Identity Protection policies, so if a user&#8217;s authentication event appears risky then flag the account for a password reset.</p>
<h2>Loose the Password</h2>
<p>I mention this one last because a Zero Password World isn&#8217;t quite there for everyone, but we are close.  With Windows Hello and the Microsoft Azure Authenticator app we are moving closer and closer.  Personally I don&#8217;t have a password for any of my Microsoft consumer accounts (Hotmail, OneDrive, etc.) and I very seldom use a password when accessing my Microsoft corporate resources.  Actually, one the rare occasion I am prompted for a password I usually have to perform a Self Service Password reset, because I honestly don&#8217;t remember it.</p>
<p>Azure Active Directory has added this ability, but it is currently in Preview (maybe even Private Preview) so customers have to opt it to enabling the capability, but this is coming and I predict by the end of 2019 this capability will be readily and easily available to customers.</p>
<h1>The Identity, Stupid!</h1>
<p>It is time for us to focus on what is most important to the success of modern IT, both for usability and security, and it is all about <strong>Who!</strong>  Like the 90&#8217;s campaign use this motto/mantra/whatever you want to call it to help you focus on <b>The Identity, Stupid!</b>  If you get Identity right you can make everything else happen.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2019/04/02/the-identity-stupid/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>Azure AD MFA managed by User Account Administrator Role</title>
		<link>https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/</link>
					<comments>https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Fri, 22 Feb 2019 14:47:55 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Active Directory (AAD)]]></category>
		<category><![CDATA[Security & Identity]]></category>
		<category><![CDATA[AAD]]></category>
		<category><![CDATA[conditional access]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Multi Factor Authentication]]></category>
		<category><![CDATA[RBAC]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=1291</guid>

					<description><![CDATA[Many organizations want to delegate enabling and disabling MFA for a user to their helpdesk, but the only RBAC role that allows MFA management is the Global Administrator and no one wants to grant helpdesk technicians Global Admin access to their tenant.  However, there is a way around this RBAC limitation if your organization has [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Many organizations want to delegate enabling and disabling MFA for a user to their helpdesk, but the only RBAC role that allows MFA management is the Global Administrator and no one wants to grant helpdesk technicians Global Admin access to their tenant.  However, there is a way around this RBAC limitation if your organization has Azure AD Premium.</p>
<h1>General Concept</h1>
<p>At a high level enabling and disabling MFA will be managed by adding and removing users from a security group.  The security group will be included in a Conditional Access policy which defines the MFA requirements.</p>
<h1>Setup</h1>
<h2>Requirements</h2>
<ol>
<li>Admin with Conditional Access administrator role</li>
<li>Helpdesk user(s) with User Administrator role assigned</li>
</ol>
<h2>Setup</h2>
<p>Have a Helpdesk user create a security group in Azure Active Directory and assign the users your organization wants to require MFA when accessing applications.  Make sure to include a descriptive name like MFA Required Users.</p>
<p><img loading="lazy" data-attachment-id="1292" data-permalink="https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/newgroup-png/" data-orig-file="https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg" data-orig-size="885,654" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="NewGroup.png" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg?w=620" class="alignnone size-full wp-image-1292" src="https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg" alt="NewGroup.png" width="885" height="654" srcset="https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg 885w, https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg?w=150&amp;h=111 150w, https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg?w=300&amp;h=222 300w, https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg?w=768&amp;h=568 768w" sizes="(max-width: 885px) 100vw, 885px" /></p>
<p>Next, have the Conditional Access Admin create a new Conditional Access rule with Assignments target set to the group created by the Helpdesk user.</p>
<p><img loading="lazy" data-attachment-id="1293" data-permalink="https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/catargetgroup-png/" data-orig-file="https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg" data-orig-size="1302,1253" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="CATargetGroup.png" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg?w=620" class="alignnone size-full wp-image-1293" src="https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg" alt="CATargetGroup.png" width="1302" height="1253" srcset="https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg 1302w, https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg?w=150&amp;h=144 150w, https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg?w=300&amp;h=289 300w, https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg?w=768&amp;h=739 768w, https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg?w=1024&amp;h=985 1024w" sizes="(max-width: 1302px) 100vw, 1302px" /></p>
<p>Next, select the Cloud apps you want to require MFA before allowing access, or select All Cloud Apps.</p>
<p><img loading="lazy" data-attachment-id="1296" data-permalink="https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/selectcloudapps-png/" data-orig-file="https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg" data-orig-size="1291,1255" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SelectCloudApps.png" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg?w=620" class="alignnone size-full wp-image-1296" src="https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg" alt="SelectCloudApps.png" width="1291" height="1255" srcset="https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg 1291w, https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg?w=150&amp;h=146 150w, https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg?w=300&amp;h=292 300w, https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg?w=768&amp;h=747 768w, https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg?w=1024&amp;h=995 1024w" sizes="(max-width: 1291px) 100vw, 1291px" /></p>
<p>Next, choose the option to Grant Access and check Require multi-factor authentication.</p>
<p><img loading="lazy" data-attachment-id="1295" data-permalink="https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/grantmfaaccess-png/" data-orig-file="https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg" data-orig-size="1290,1255" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="GrantMFAAccess.png" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg?w=300" data-large-file="https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg?w=620" class="alignnone size-full wp-image-1295" src="https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg" alt="GrantMFAAccess.png" width="1290" height="1255" srcset="https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg 1290w, https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg?w=150&amp;h=146 150w, https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg?w=300&amp;h=292 300w, https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg?w=768&amp;h=747 768w, https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg?w=1024&amp;h=996 1024w" sizes="(max-width: 1290px) 100vw, 1290px" /></p>
<p>Finally, Enable the policy and choose Create.</p>
<h1><img loading="lazy" data-attachment-id="1294" data-permalink="https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/createpolicy-png/" data-orig-file="https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg" data-orig-size="817,1257" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="CreatePolicy.png" data-image-description="" data-image-caption="" data-medium-file="https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg?w=195" data-large-file="https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg?w=620" class="alignnone size-full wp-image-1294" src="https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg" alt="CreatePolicy.png" width="817" height="1257" srcset="https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg 817w, https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg?w=97&amp;h=150 97w, https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg?w=195&amp;h=300 195w, https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg?w=768&amp;h=1182 768w" sizes="(max-width: 817px) 100vw, 817px" /></h1>
<h1>Operations</h1>
<p>Now, when the Helpdesk (someone with User Administrator Role) needs to enable or disable MFA for a user all they need to do is add (Enable MFA) or remove (Disable MFA) the user from your MFA Security Group.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2019/02/22/azure-ad-mfa-managed-by-user-account-administrator-role/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/02/newgroup.png.jpg" medium="image">
			<media:title type="html">NewGroup.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/02/catargetgroup.png.jpg" medium="image">
			<media:title type="html">CATargetGroup.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/02/selectcloudapps.png.jpg" medium="image">
			<media:title type="html">SelectCloudApps.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/02/grantmfaaccess.png.jpg" medium="image">
			<media:title type="html">GrantMFAAccess.png</media:title>
		</media:content>

		<media:content url="https://dmcwee.files.wordpress.com/2019/02/createpolicy.png.jpg" medium="image">
			<media:title type="html">CreatePolicy.png</media:title>
		</media:content>
	</item>
		<item>
		<title>O365 MFA vs Azure AD MFA</title>
		<link>https://davidmcwee.com/2018/12/04/o365-mfa-vs-azure-ad-mfa/</link>
					<comments>https://davidmcwee.com/2018/12/04/o365-mfa-vs-azure-ad-mfa/#comments</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Tue, 04 Dec 2018 20:44:20 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure Active Directory (AAD)]]></category>
		<category><![CDATA[Azure Active Directory B2B (AAD B2B)]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security & Identity]]></category>
		<category><![CDATA[Azure Authenticator App]]></category>
		<category><![CDATA[Multi Factor Authentication]]></category>
		<category><![CDATA[Office 365]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=739</guid>

					<description><![CDATA[As a Technical Solutions Professional at Microsoft who covers Identity and Security I get a lot of questions about Office 365 MFA vs. Azure Active Directory MFA around the differences, benefits, and what I suggest.  Customers always assume because I concentrate on the EMS stack Microsoft offers (Intune, Azure AD, Azure Information Protection) I recommend [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>As a Technical Solutions Professional at Microsoft who covers Identity and Security I get a lot of questions about Office 365 MFA vs. Azure Active Directory MFA around the differences, benefits, and what I suggest.  Customers always assume because I concentrate on the EMS stack Microsoft offers (Intune, Azure AD, Azure Information Protection) I recommend Azure AD MFA over Office 365 MFA, but the reality is when customers really compare the experiences they will almost always go with Azure AD MFA.</p>
<p>Before we talk about Office 365 vs Azure AD MFA let me make this position perfectly clear.</p>
<blockquote><p>Use MFA! If you are not using, or haven&#8217;t implemented, MFA stop reading and GO TURN IT ON especially for your Administrator accounts.</p></blockquote>
<p>Why?  We, Microsoft, find that by enabling MFA on your accounts the your organization will reduce account compromise by OVER 99%!</p>
<h2>Office 365 MFA</h2>
<p>Office 365 E3, and up, subscriptions entitle an organization to enable Multi Factor Authentication for their users who will be accessing O365 resources (SharePoint, OneDrive, Office Pro Plus, etc.).  When a user is entitled and enabled to use MFA they have three (3) options:</p>
<ol>
<li>Azure Authenticator App</li>
<li>Text Message</li>
<li>Phone Call + PIN</li>
</ol>
<p>To enable Office 365 MFA you must turn the feature on for each user individually (user-by-user), and once MFA is required for the user, it is always required for the user.  Therefore, when a user is authenticating to O365 resources from their work computer or home computer using Office or browser, they will be prompted for MFA verification.</p>
<h2>Azure AD MFA</h2>
<p>Azure AD MFA is available for organizations that purchase Azure AD Premium P1, or P2, licenses for their users and this Multi Factor Authentication solution can be use with Office 365, Azure, On-Premise applications, third party applications (SaaS), and custom built Line of Business applications.  Like the O365 MFA offering Azure AD MFA provides three (3) &#8216;native&#8217; options:</p>
<ol>
<li>Azure Authenticator App</li>
<li>Text Message</li>
<li>Phone Call + PIN</li>
</ol>
<p>Azure AD also offers customers the ability to use 3rd party MFA providers including the following:</p>
<ol>
<li>RSA</li>
<li>DUO</li>
<li>Trusona</li>
<li>(More to come)</li>
</ol>
<p>This additional integration with 3rd party MFA providers means that any existing investment in MFA can continue to be leveraged and we can provide MFA support even in locations where mobile or office phone access is limited or prohibited.</p>
<p>The way an organization applies MFA with Azure AD is also different than Office 365.  When applying MFA with Azure AD an organization does so by creating Conditional Access (CA) rules.  CA rules for MFA can be very simple:</p>
<pre>All Users + All App + MFA = Grant Access</pre>
<p>Basically this is what the Office 365 MFA solution provides, but limited to O365 apps that is.  However, CA can do much better, it can actually allow you to address questions and policies intelligently:</p>
<ul>
<li>Why prompt for MFA when a user is connecting from a corporate network and is using a corporate device?</li>
<li>Why prompt for MFA when a user is connecting to their time card the same way you would if they were connecting to the corporate account line of business application?</li>
<li>Why MFA everyone all the time, can we target specific users when they are accessing accessing sensitive information?</li>
</ul>
<p>Using CA to drive MFA also allows your organization to integrate MFA easily with Windows Always-On VPN solutions.  Now not only do you protect a user when their app connects to a service, but you protect your corporate network when an endpoint device connects and its all managed with the same CA, MFA, and identities.</p>
<h2>What drive Azure AD MFA over Office 365 MFA</h2>
<p>I find most organizations choose Azure AD MFA over Office 365 MFA for one of these two reasons:</p>
<ol>
<li>They already invested in an MFA solution, maybe RSA, so the users know it, IT trusts it, and they can continue to use it.</li>
<li>They don&#8217;t have to use an All-Or-Nothing approach, they can apply a Who-What-When-Where approach to their MFA policy and only require MFA when necessary.</li>
</ol>
<p>To me, the greatest benefit of Azure AD MFA is the ability to target MFA scenarios.  I&#8217;ve seen many customers push MFA for everyone all the time, and within a short period of time they turn it off because &#8220;there was too much prompting&#8221;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2018/12/04/o365-mfa-vs-azure-ad-mfa/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>SAML Security Vulnerability</title>
		<link>https://davidmcwee.com/2018/03/12/saml-security-vulnerability/</link>
					<comments>https://davidmcwee.com/2018/03/12/saml-security-vulnerability/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Mon, 12 Mar 2018 14:19:41 +0000</pubDate>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[ADFS]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Security & Identity]]></category>
		<category><![CDATA[AAD]]></category>
		<category><![CDATA[AAD B2C]]></category>
		<category><![CDATA[AD FS]]></category>
		<category><![CDATA[Azure Active Directory]]></category>
		<category><![CDATA[Azure Active Directory B2c]]></category>
		<category><![CDATA[Login]]></category>
		<category><![CDATA[Microsoft]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=496</guid>

					<description><![CDATA[Duo Labs announced on Feb 27th that it had discovered a security vulnerability in some SAML SSO providers.  The outline of their public post showed how an attacker could authenticate so a SAML SSO provider, and then manipulate the SAML response to allow them to impersonate a user based thanks to different canonicalization algorithms. As [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Duo Labs announced on Feb 27th that it had discovered a <a href="https://duo.com/blog/duo-finds-saml-vulnerabilities-affecting-multiple-implementations">security vulnerability</a> in some SAML SSO providers.  The outline of their public post showed how an attacker could authenticate so a SAML SSO provider, and then manipulate the SAML response to allow them to impersonate a user based thanks to different canonicalization algorithms.</p>
<p>As you can imagine this raised serious concerns across the IT industry who relies on SAML for Federated Identity and Authentication services.</p>
<p>On March 2nd, following a review of the issue <a href="https://cloudblogs.microsoft.com/enterprisemobility/2018/03/02/latest-saml-vulnerability-not-present-in-azure-ad-and-adfs/">Microsoft announced</a> that our core products, Azure Active Directory, Azure Active Directory B2C, and Windows Server Active Directory Federation Services are <strong>NOT</strong> affected by this vulnerability.  In addition, any services which utilize Windows Identity Foundation (WIF) and/or ASP.NET WS-Federation as their identity middleware are also <strong>NOT</strong> affected.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2018/03/12/saml-security-vulnerability/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
		<item>
		<title>ADFS: Certificate Authentication and A Dirty Certificate Store</title>
		<link>https://davidmcwee.com/2018/02/27/adfs-certificate-authentication-and-a-dirty-certificate-store/</link>
					<comments>https://davidmcwee.com/2018/02/27/adfs-certificate-authentication-and-a-dirty-certificate-store/#respond</comments>
		
		<dc:creator><![CDATA[David McWee]]></dc:creator>
		<pubDate>Tue, 27 Feb 2018 19:12:49 +0000</pubDate>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security & Identity]]></category>
		<category><![CDATA[AD FS]]></category>
		<category><![CDATA[ADFS]]></category>
		<category><![CDATA[CBA]]></category>
		<category><![CDATA[Certificate Based Authentication]]></category>
		<category><![CDATA[Client Certificate]]></category>
		<category><![CDATA[Login]]></category>
		<category><![CDATA[TCL]]></category>
		<category><![CDATA[Timeout]]></category>
		<category><![CDATA[Trusted Certificate List]]></category>
		<category><![CDATA[X.509]]></category>
		<guid isPermaLink="false">http://davidmcwee.com/?p=488</guid>

					<description><![CDATA[I often support ADFS configurations that are used to enable Client Certificate Authentication.  Typically, these deployments are straight forward: we have certificates that cover the URLs ([sts url] and certauth.[sts url] see this article for more details), we enable the client certificate authentication and it works. Then there are the other deployments. The Dirty Certificate [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I often support ADFS configurations that are used to enable Client Certificate Authentication.  Typically, these deployments are straight forward: we have certificates that cover the URLs ([sts url] and certauth.[sts url] see <a href="https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-requirements">this article</a> for more details), we enable the client certificate authentication and it works.</p>
<p>Then there are the other deployments.</p>
<h1>The Dirty Certificate Store</h1>
<h2>Symptom</h2>
<p>After enabling client certificate authentication when the test user selects the X.509 Certificate link they are redirected to the certauth url, but the option to select a client certificate never appears and after an extended period of time, something like 2-5 minutes, the request times out.</p>
<h2>Troubleshooting</h2>
<p>The easiest or most obvious cause would be a SSL certificate that doesn&#8217;t support the auth.[sts url] which would cause ADFS to use port 49443 and the traffic being blocked by the firewall.  However, working with the firewall administrator we could see the traffic coming in and going out on 443 and never moving to 49443.  Further testing with a client &#8216;inside&#8217; the organization showed similar timeout behavior so we eliminated both the firewall and the bad SSL certificate.</p>
<p>I began hunting through the ADFS logs as well as the client logs, but found nothing so I was stuck.  Fortunately, I was able to use some of the internal Microsoft resources and was told to try adding the following registry key:</p>
<pre>KEY: HKLM\system\currentcontrolset\control\securityproviders\schannel\sendtrustedissuerlist
Type: DWORD (32 bit)
Value: 0</pre>
<p>After adding this to the ADFS server, and performing a reboot, we started getting prompted to pick a client certificate.  So doing a little research I came across this TechNet which outlines what the registry key above does.</p>
<p><a href="https://technet.microsoft.com/en-us/library/cc776467(v=ws.10)" rel="nofollow">https://technet.microsoft.com/en-us/library/cc776467(v=ws.10)</a>.aspx</p>
<p>The result is this key blocks the ADFS server from sending a list of Trusted Certificate Issuers (TCL) to the client machine.  This is desired, normally, because we don&#8217;t want a user to pick a certificate for authentication that the ADFS server doesn&#8217;t trust.  However, in troubleshooting turning this setting &#8216;off&#8217; is useful because we can now validate that ADFS is sending the request to the client for an authentication certificate, and the client can provide a certificate to authenticate with.</p>
<p>SUCCESS, right?</p>
<h2>Fix It</h2>
<p>It&#8217;s not recommended to leave the TCL disabled because a user will eventually try to authenticate with the wrong certificate, fail, and then you&#8217;ll have to troubleshoot <strong>that</strong> problem&#8230;and fix it.</p>
<p>There are two issues that can occur with the TCL. First, if there are too many certificates then the server can&#8217;t send them all to the client.  Second, if there are non-root certificates in the root certificate store, or root certificates in the intermediate certificate store then the list is corrupted.  In either case, the client sees no certificate selection prompt and authentication stalls resulting in failure.</p>
<p>To solve the first problem of too many TCL entries you can remove old or unused Certificates from the Root Certificate store to reduce the size of the TCL.</p>
<p>To solve the problem of Certificates in the wrong certificate store you can review each root certificate and verify it&#8217;s issuer IS itself.  You can then review each Intermediate Certificate and verify it&#8217;s issuer IS NOT itself.  Or, you could use the below PowerShell script to help you identify the possible certificate errors.</p>
<pre>Write-Output "Issued To,Issued By,Certificate Store"

$rootconflicts = Get-ChildItem Cert:\LocalMachine\Root | Where-Object { $_.Issuer -ne $_.Subject }
$rootconflicts | ForEach-Object { 
 $subj = $_.SubjectName.Name.Split(",")[0].Split("=")[1]
 $issr = $_.Issuer.split(",")[0].Split("=")[1]
 Write-Output "$subj,$issr,Root"
}

$conflicts = Get-ChildItem Cert:\LocalMachine\CA | Where-Object { $_.Issuer -eq $_.Subject }
$conflicts | ForEach-Object { 
 $subj = $_.SubjectName.Name.Split(",")[0].Split("=")[1]
 $issr = $_.Issuer.split(",")[0].Split("=")[1]
 Write-Output "$subj,$issr,CA"
}

Write-Output "Found $($rootconflicts.Length) Non-Root Certificates in the Root Certificate Store."
Write-Output "Found $($conflicts.Length) Root Certificates in the Intermediate CA Store."</pre>
<p>This is also available at my GitHub repository.</p>
<p><a href="https://github.com/dmcwee/azure/tree/master/Scripts" rel="nofollow">https://github.com/dmcwee/azure/tree/master/Scripts</a></p>
<p><em>[3/5/18 Update]: Added link to the AD FS Requirements article on docs.microsoft.com</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://davidmcwee.com/2018/02/27/adfs-certificate-authentication-and-a-dirty-certificate-store/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content url="https://0.gravatar.com/avatar/f27563a9e500d8abcce5f0ecc68b8762?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">dmcwee</media:title>
		</media:content>
	</item>
	</channel>
</rss>
