<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Anthony Ho</title><link>http://blogs.technet.com/b/aho/</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.19849 (Build: 5.6.583.19849)</generator><item><title>FIM 2010 R2 - Web-Based Password Reset, Part 3</title><link>http://blogs.technet.com/b/aho/archive/2011/12/06/fim-2010-r2-web-based-password-reset-part-3.aspx</link><pubDate>Tue, 06 Dec 2011 14:28:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3469262</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3469262</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2011/12/06/fim-2010-r2-web-based-password-reset-part-3.aspx#comments</comments><description>&lt;p&gt;FIM lets users reset their passwords only after authenticating them against answers to commonly asked security questions that they registered with.&lt;/p&gt;
&lt;p&gt;One major complaint about FIM 2010's QA Gate implementation is that it does not allow ITPro to specify some sort of validation or policies on the answers. It's possible that users might enter "abc" for all questions and some believe that is a security concern. (In fact, I used to use 1 for my answers during testing because the keyboard sequence "1&amp;lt;tab&amp;gt;1&amp;lt;tab&amp;gt;1&amp;lt;tab&amp;gt;" is the easiest on the keyboard.)&lt;/p&gt;
&lt;h3&gt;QA Gate Enhancement&lt;/h3&gt;
&lt;p&gt;We heard your feedback loud and clear. Thus we are making a few changes to FIM 2010 R2, namely:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Disallow duplicated answers&lt;/li&gt;
&lt;li&gt;Apply a custom regular expression on the answers for validation for all answers per gate&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Below is a screenshot of the QA Gate Configuration from the workflow designer (aka BPM Designer)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/6761.QAEnhancement.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/6761.QAEnhancement.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;How Does It Work?&lt;/h3&gt;
&lt;p&gt;Some of you might ask, "Wait, isn't the answer hashed in the client? How is this possible?" First, Congratulations and well done on knowing password reset in depth. :)&lt;/p&gt;
&lt;p&gt;To achieve this validation on the server side, now the answers are sent to the server in un-hashed over a WCF channel protected with message-level encryption (Nothing is changed in the channel itself. We are just changing the payload at the application layer)&lt;/p&gt;
&lt;h3&gt;Special Notes&lt;/h3&gt;
&lt;p&gt;This check is &lt;em&gt;only&lt;/em&gt; enforced during registration phase and the answers are still stored hashed in the database.&lt;/p&gt;
&lt;p&gt;To make sure the policies are enforced by default, registration from FIM 2010 clients are disallowed. There is an option at the bottom of the configuration to let you run FIM in hybrid mode during the transitional upgrade period. In that case, FIM 2010 clients will be able to register and bypass the policies, while registrations originating from FIM 2010 R2 clients will have the policies enforced.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3469262" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Gate/">Gate</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Authentication/">Authentication</category></item><item><title>FIM 2010 R2 - Web-Based Password Reset, Part 2</title><link>http://blogs.technet.com/b/aho/archive/2011/11/29/fim-2010-r2-web-based-password-reset-part-2.aspx</link><pubDate>Tue, 29 Nov 2011 02:42:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3467781</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3467781</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2011/11/29/fim-2010-r2-web-based-password-reset-part-2.aspx#comments</comments><description>&lt;p&gt;Web-Based Password Reset is not just about writing a web client in ASP.NET. I mentioned that a few times when talking to different people. Everyone can do that by writing their own WCF client. If reverse engineering the FIM WebService protocol is too hard, there is the &lt;a href="http://fim2010client.codeplex.com/"&gt;open source client supported by the community&lt;/a&gt;. In fact, BlueVault has done exactly &lt;a href="http://www.bluevaultsoftware.com/products/Pages/SSPR.aspx"&gt;that&lt;/a&gt;. It definitely will not be too hard for us to do. However, when we think through the scenarios in depth, we realize most customers want web-based SSPR so that people not connected to the network can also reset their password. That implies exposing not only the portal, but also indirectly exposes FIMService to the extranet. This make us rethink our security model.&lt;/p&gt;
&lt;p&gt;In this blog post and the coming few ones, I am going to talk about a few improvements related to the security aspect of web-based SSPR.&lt;/p&gt;
&lt;h2&gt;Scenario&lt;/h2&gt;
&lt;p&gt;In FIM 2010, password reset from the intranet would require user authenticates themselves using QA Gate. In R2, when ITPros exposes web-based SSPR to the extranet, they might want to have additional authentication for added security (e.g. RSA token) yet keeping intranet reset as easy as before.&lt;/p&gt;
&lt;h2&gt;What is Security Context?&lt;/h2&gt;
&lt;p&gt;We tackle this scenario by introduce something called security context which can be found in the &lt;em&gt;extended attribute&lt;/em&gt; of the request.&lt;/p&gt;
&lt;pre class="scroll"&gt;&lt;code class="csharp"&gt;namespace Microsoft.ResourceManagement.WebServices.WSResourceManagement&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public enum SecurityContext&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Extranet,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;code class="csharp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;NoneSpecified&lt;br /&gt;&lt;code class="csharp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A request tagged with Extranet means it comes from the SSPR portal that is serving requests coming from the extranet.&lt;/p&gt;
&lt;h2&gt;How does Security Context Work?&lt;/h2&gt;
&lt;p&gt;If you look at the new workflow designer UI, you will notice some of the gate-configuration pages have an extract section for SecurityContext. The description is self-explanatory. If set to &lt;em&gt;Extranet&lt;/em&gt;, the activity/gate will only be run if the request comes from the extranet.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/3146.SecurityContext.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/3146.SecurityContext.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;How do I Configure SecurityContext Tagged in Requests from SSPR Portals?&lt;/h2&gt;
&lt;p&gt;In setup, there is the option to specify that.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/3113.SecurityContextSetup.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/3113.SecurityContextSetup.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That translates to &amp;lt;add key="SecurityContextAssertion" value="[Extranet|NoneSpecified]" /&amp;gt; at "C:\Program Files\Microsoft Forefront Identity Manager\2010\Password [Registration|Reset] Portal\Web.config"&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3467781" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Authentication/">Authentication</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Workflow/">Workflow</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Web_2D00_Based+Password+Reset/">Web-Based Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Security+Context/">Security Context</category></item><item><title>Office 365 Password Reset GA</title><link>http://blogs.technet.com/b/aho/archive/2011/11/22/office-365-password-reset-ga.aspx</link><pubDate>Tue, 22 Nov 2011 01:27:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3466540</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3466540</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2011/11/22/office-365-password-reset-ga.aspx#comments</comments><description>&lt;p&gt;Sooner or later, you may forget the password that you need to sign in to your account. It happens to just about everyone. If you forget your Office 365 password, and you&amp;rsquo;re not an Office 365 administrator, confess your predicament to an administrator in your organization, and the kind administrator resets your password.&lt;/p&gt;
&lt;p&gt;If &lt;i&gt;you&amp;rsquo;re&lt;/i&gt; the administrator, it&amp;rsquo;s a little more complicated. If you&amp;rsquo;re not the only administrator, you can ask another administrator to reset your password. If you are the only administrator, or if another administrator isn&amp;rsquo;t available, you can use the new automated administrator password reset process. On the &lt;a href="https://login.microsoftonline.com/"&gt;Office 365 sign-in page&lt;/a&gt;, click &lt;b&gt;Forgot your password?&lt;/b&gt; to start the process. We want to protect the security of your account, so you have to follow several steps. As you step through the process, you&amp;rsquo;ll receive an email containing a link. When you click that link, a text message containing a code is sent to your mobile phone, and a Web page is displayed where you enter that code. After you enter the code and click &lt;b&gt;Next&lt;/b&gt;, then you enter a new password.&lt;/p&gt;
&lt;p&gt;For the administrator password reset to work, you must have already provided a phone number on which you can receive a text (SMS) message and an alternate email address. The email address must not be your Office 365 email address, because if you can&amp;rsquo;t sign in to your Office 365 account, you can&amp;rsquo;t retrieve email sent to that address. You enter this information in the user management area. To get there, click &lt;b&gt;Admin&lt;/b&gt;, and under &lt;b&gt;Management&lt;/b&gt;, click &lt;b&gt;Users&lt;/b&gt;. On the &lt;b&gt;Settings&lt;/b&gt; tab, you enter the email address in the &lt;b&gt;Alternate email address&lt;/b&gt; box. On the &lt;b&gt;Properties&lt;/b&gt; tab, you enter the mobile phone number in the &lt;b&gt;Mobile phone&lt;/b&gt; box.&lt;/p&gt;
&lt;p&gt;Once you submit the reset request, you need to respond promptly to the email and to the text message. There is a 10-minute timeout period each for the email and for the text message, after which you'll have to restart the process.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t provided alternate email address and mobile telephone information, you may see a popup window that prompts you to provide this information when you sign in to Office 365. Taking a few seconds to type the information may spare you a headache later.&lt;/p&gt;
&lt;p&gt;For more information about how an administrator can reset his or her own password, see the Help topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For Office 365 for enterprises, see &lt;a href="http://onlinehelp.microsoft.com/en-us/Office365-enterprises/hh143503.aspx"&gt;Reset an administrator's password&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For Office 365 for professionals and small businesses, see &lt;a href="http://onlinehelp.microsoft.com/en-us/Office365-smallbusinesses/gg192871.aspx"&gt;Reset an administrator's password&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3466540" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Office+365/">Office 365</category></item><item><title>Office 365 Password Reset Beta</title><link>http://blogs.technet.com/b/aho/archive/2011/08/30/office-365-password-reset-beta.aspx</link><pubDate>Tue, 30 Aug 2011 05:37:13 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3449872</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3449872</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2011/08/30/office-365-password-reset-beta.aspx#comments</comments><description>&lt;p&gt;Over the last year, I have been working on this Office 365 Password Reset project.&lt;/p&gt;
&lt;p&gt;We are doing a closed beta. If you are interested to signup and provide feedback, click on the link which contains information on the action items.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.office365.com/en-us/b/office_365_technical_blog/archive/2011/08/26/password-reset-beta.aspx"&gt;http://community.office365.com/en-us/b/office_365_technical_blog/archive/2011/08/26/password-reset-beta.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3449872" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Office+365/">Office 365</category></item><item><title>FIM 2010 R2 - Web-Based Password Reset, Part 1</title><link>http://blogs.technet.com/b/aho/archive/2011/08/01/fim-2010-r2-web-based-password-reset.aspx</link><pubDate>Mon, 01 Aug 2011 00:59:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3444402</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3444402</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2011/08/01/fim-2010-r2-web-based-password-reset.aspx#comments</comments><description>&lt;p&gt;I am very excited to let everyone knows that &lt;strong&gt;FIM 2010 R2 Beta has released featuring Web-Based Password Reset&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;How to download FIM 2010 R2 Beta&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Go &lt;a href="https://connect.microsoft.com/site433"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Answer the survey questions and Submit. This auto-approves you for the Beta connection.&lt;/li&gt;
&lt;li&gt;Click the Downloads link in the left column.&lt;/li&gt;
&lt;li&gt;Click the FIM 2010 R2 Beta download link.&lt;/li&gt;
&lt;li&gt;Follow the instructions.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The download also includes R2 language pack and documentations. We will soon be publishing the documentations on TechNet as well.&lt;/p&gt;
&lt;h3&gt;Web-Based Password Reset - Screenshots&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Registration&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Welcome Screen&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/4377.Registration_2D00_WelcomeScreen.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/4377.Registration_2D00_WelcomeScreen.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Password Gate. It asks for your password. You don't want someone else to register for you while you are not at your machine right?&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/4532.Registration_2D00_PasswordGate.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/4532.Registration_2D00_PasswordGate.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;QA Gate. Hm... What is my Employee number? Let me think...&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/7612.Registration_2D00_QA.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/7612.Registration_2D00_QA.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;That's it. Pretty easy huh.&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/7534.Registration_2D00_Finish.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/7534.Registration_2D00_Finish.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Reset&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;I don't remember my password. Let's reset it.&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/8867.Reset_2D00_WelcomeScreen.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/8867.Reset_2D00_WelcomeScreen.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;I know the answers :)&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/4353.Reset_2D00_QA.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/4353.Reset_2D00_QA.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;What do I want for my new password?&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/6837.Reset_2D00_NewPassword.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/6837.Reset_2D00_NewPassword.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wow, I can't believe it is that easy and fast.&lt;br /&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/8345.Reset_2D00_Finish.png"&gt;&lt;img src="http://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-78-39/8345.Reset_2D00_Finish.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3444402" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Web_2D00_Based+Password+Reset/">Web-Based Password Reset</category></item><item><title>RunAs in FIM 2010</title><link>http://blogs.technet.com/b/aho/archive/2011/07/27/runas-in-fim-2010.aspx</link><pubDate>Wed, 27 Jul 2011 09:34:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3443655</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3443655</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2011/07/27/runas-in-fim-2010.aspx#comments</comments><description>&lt;p&gt;Often times, I come across the question&lt;/p&gt;
&lt;h3&gt;How can I write some code to do something as another user in FIM 2010?&lt;/h3&gt;
&lt;p&gt;Generally I see two different answers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Impersonate the other user&lt;/li&gt;
&lt;li&gt;Set the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.resourcemanagement.workflow.activities.createresourceactivity.actorid.aspx"&gt;ActorId&lt;/a&gt; to the user&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So which one is correct?&lt;/p&gt;
&lt;p&gt;In fact, both can be correct, depending on what you are trying to do.&lt;/p&gt;
&lt;h3&gt;How does FIM work?&lt;/h3&gt;
&lt;p&gt;To understand which approach you should use, you have to understand how FIM works.&lt;/p&gt;
&lt;p&gt;FIMService exposes different WebService endpoints for differetn Create / Read / Update / Delete / Enumerate / etc operations. Those endpoints have a binding that requires Kerberos. When an EXE running as DomainA\JohnDoe makes a WebService call to FIMService, FIMService will look at the WindowsIdentity of the caller and first thing it does is creating a Request Object with Requestor stamped as the calling user (JohnDoe in this case). This is pretty much a few of the only place where FIMService is looking at the WindowsIdentity. From then on, FIMService will follow the request processing pipeline based on the Request Object.&lt;/p&gt;
&lt;p&gt;Now consider an ASP.NET application (imagine a FIMPortal clone) is running as DomainA\PortalServiceAccount which provides a front-end UX for Group Management. When JohnDoe goes to the portal, the ASP.NET app should really be making the WebService call as JohnDoe (instead of PortalServiceAccount) so the rights / permissions applies. In this case, it is not hard to imagine that ASP.NET code should &lt;em&gt;impersonate&lt;/em&gt; JohnDoe and make the WebService call to FIMService. This is answer #1.&lt;/p&gt;
&lt;p&gt;After the Request Object is created with proper Requestor stamped, FIMService executes the request processing pipeline under its own credential (i.e. FIMService service account). FIMService does NOT impersonate the user. That's partly because FIMService manages its own rights / permissions using Management Policy Rule (MPR). FIMService does NOT rely on Active Directory's permission infrastructure.&lt;/p&gt;
&lt;p&gt;As part of the request processing pipeline, FIMService will run different Workflows and Activities. Since FIMService does NOT impersonate the Requestor, it is &lt;em&gt;FIMService service account&lt;/em&gt; that is executing the code as far as .NET and OS can tell. Now, in the Activity code, if you want to do something as JohnDoe, you will set the ActorId to JohnDoe. This is answer #2.&lt;/p&gt;
&lt;p&gt;Base line is that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kerberos is an Active Directory construct and it's the way to let FIMService knows who is making the WebService call. A client application running as UserA can impersonate as UserB when making the WebService call so the Requestor would become UserB. If you are writing a custom client to consume FIMService's WebService endpoints, you should impersonate.&lt;/li&gt;
&lt;li&gt;On the other hand, ActorId is a FIMService construct in the Activity so that rights check and a few other things happens appropriately (FIMService service account is pretty much omnipotent in an Activity)&lt;/li&gt;
&lt;li&gt;Nothing prevents you to impersonate within your custom Activity (if you know what you are doing). For example, you can impersonate to make call outside of FIMService to do something else.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3443655" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/ActorId/">ActorId</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Workflow/">Workflow</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Impersonate/">Impersonate</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Activity/">Activity</category></item><item><title>FIM 2010 Self-Service Password Reset Now Supports All Domain Password Policies</title><link>http://blogs.technet.com/b/aho/archive/2010/11/10/fim-2010-self-service-password-reset-now-supports-all-domain-password-policies.aspx</link><pubDate>Wed, 10 Nov 2010 07:01:48 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3367216</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3367216</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2010/11/10/fim-2010-self-service-password-reset-now-supports-all-domain-password-policies.aspx#comments</comments><description>&lt;p&gt;I am excited to announce that FIM 2010 Self-Service Password Reset now supports all domain password policies.&amp;nbsp; It was a joint effort between the Windows Active Directory and FIM development teams to provide this new functionality. &lt;br /&gt;&lt;br /&gt;Details of this change can be found in &lt;a href="http://support.microsoft.com/KB/2443871"&gt;http://support.microsoft.com/KB/2443871&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3367216" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category></item><item><title>Troubleshooting FIMService / FIMPortal / Password Reset Client</title><link>http://blogs.technet.com/b/aho/archive/2010/09/29/troubleshooting-fimservice-fimportal-password-reset-client.aspx</link><pubDate>Wed, 29 Sep 2010 08:09:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3358637</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3358637</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2010/09/29/troubleshooting-fimservice-fimportal-password-reset-client.aspx#comments</comments><description>&lt;p&gt;FIM is a complex product. Once a while, I find myself just clueless why something does not work. I have the advantage of having access to the source code and be able to debug. Attaching a debugger isn't a 5-second task and very often the answer is actually in the log. In this blog post, I would talk about how to enable tracing.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Warning: you should always backup your config file before making any change.&lt;/b&gt;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;Let's start with the easiest - Password Reset Client&lt;/b&gt;.&lt;br /&gt;&lt;/h1&gt;
&lt;p&gt;The following is the config file for the client at C:\Program Files\Microsoft Forefront Identity Manager\2010\Password Reset Client Service\PwdMgmtProxy.exe.config.&lt;/p&gt;
&lt;pre class="scroll"&gt;&lt;code class="html"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;    &amp;lt;configSections&amp;gt;&lt;br /&gt;        &amp;lt;section&lt;br /&gt;            name="resourceManagementClient"&lt;br /&gt;            type="Microsoft.ResourceManagement.WebServices.Client.ResourceManagementClientSection, Microsoft.ResourceManagement"/&amp;gt;&lt;br /&gt;    &amp;lt;/configSections&amp;gt;&lt;br /&gt;    &amp;lt;resourceManagementClient&lt;br /&gt;        resourceManagementServiceBaseAddress="http://localhost:5725"&lt;br /&gt;        timeoutInMilliseconds="60000" /&amp;gt;&lt;br /&gt;    &amp;lt;appSettings&amp;gt;&lt;br /&gt;        &amp;lt;add key="NamedPipeTimeout" value="10000"/&amp;gt;&lt;br /&gt;    &amp;lt;/appSettings&amp;gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt;&amp;lt;!--&lt;/span&gt;&lt;br /&gt;    &amp;lt;system.diagnostics&amp;gt;&lt;br /&gt;        &amp;lt;sources&amp;gt;&lt;br /&gt;            &amp;lt;source name="&lt;span style="background-color: #ffff00;"&gt;Microsoft.ResourceManagement&lt;/span&gt;" switchValue="&lt;span style="background-color: #ffff00;"&gt;Warning&lt;/span&gt;"&amp;gt;&lt;br /&gt;                &amp;lt;listeners&amp;gt;&lt;br /&gt;                    &amp;lt;add type="System.Diagnostics.DefaultTraceListener" name="Default"&amp;gt;&lt;br /&gt;                        &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;                    &amp;lt;/add&amp;gt;&lt;br /&gt;                    &amp;lt;add initializeData="&lt;span style="background-color: #ffff00;"&gt;C:\Logs\PwdMgmtProxy.svclog&lt;/span&gt;"&lt;br /&gt;                        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;br /&gt;                        name="ResourceManagementListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"&amp;gt;&lt;br /&gt;                        &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;                    &amp;lt;/add&amp;gt;&lt;br /&gt;                    &amp;lt;add initializeData="Application" type="System.Diagnostics.EventLogTraceListener"&lt;br /&gt;                        name="myEventListener"&amp;gt;&lt;br /&gt;                        &amp;lt;filter type="System.Diagnostics.EventTypeFilter" initializeData="&lt;span style="background-color: #ffff00;"&gt;Error&lt;/span&gt;" /&amp;gt;&lt;br /&gt;                    &amp;lt;/add&amp;gt;&lt;br /&gt;                    &amp;lt;add type="System.Diagnostics.ConsoleTraceListener" name="myConsoleListener"&lt;br /&gt;                        traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"&amp;gt;&lt;br /&gt;                        &amp;lt;filter type="System.Diagnostics.EventTypeFilter" initializeData="Information" /&amp;gt;&lt;br /&gt;                    &amp;lt;/add&amp;gt;&lt;br /&gt;                &amp;lt;/listeners&amp;gt;&lt;br /&gt;            &amp;lt;/source&amp;gt;&lt;br /&gt;        &amp;lt;/sources&amp;gt;&lt;br /&gt;        &amp;lt;trace autoflush="true" indentsize="0" /&amp;gt;&lt;br /&gt;    &amp;lt;/system.diagnostics&amp;gt;&lt;br /&gt;&lt;span style="background-color: #ffff00;"&gt;--&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FIM uses standard &lt;a href="http://msdn.microsoft.com/en-us/library/zs6s4h68%28VS.85%29.aspx"&gt;.NET Tracing and Instrumenting&lt;/a&gt; libraries. I have highlighted a few important things in the config file:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The entire &lt;i&gt;&amp;lt;system.diagnostics&amp;gt;...&amp;lt;system.diagnostics&amp;gt;&lt;/i&gt; is commented out. You will need to un-comment that.&lt;/li&gt;
&lt;li&gt;The managed part of FIM (FIMService / FIMPortal / Pwd Reset Client) shares the same tracing library and all traces are written to a source &lt;i&gt;Microsoft.ResourceManagement&lt;/i&gt;. You should not change this part.&lt;/li&gt;
&lt;li&gt;The &lt;i&gt;Warning&lt;/i&gt; switch means for all FIM specific traces, only traces of warning level and above will be considered. Notice nothing has been logged so far.&lt;/li&gt;
&lt;li&gt;For those traces that are being considered, they will be passed to each of the &lt;i&gt;listeners&lt;/i&gt;:&lt;ol&gt;
&lt;li&gt;The XmlWriterTraceListener will write all the traces to the file C:\Logs\PwdMgmtProxy.svclog.&lt;/li&gt;
&lt;li&gt;The EventLogTraceListener will further filter only trace with Error level and above, and write them to event log.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So to enable tracing for Password Reset Client, you will need to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Uncomment &lt;i&gt;&amp;lt;system.diagnostics&amp;gt;...&amp;lt;system.diagnostics&amp;gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Change &lt;i&gt;Warning&lt;/i&gt; to &lt;i&gt;Verbose&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;If you want everything to be written to event log as well, change &lt;i&gt;Error&lt;/i&gt; to &lt;i&gt;Verbose&lt;/i&gt; as well&lt;/li&gt;
&lt;li&gt;Create C:\Logs and grant NETWORK SERVICE full access on that folder so the file can be created.&lt;/li&gt;
&lt;li&gt;Restart FIMPasswordReset service&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;FIMService and FIMPortal are really the same&lt;/h1&gt;
&lt;p&gt; The FIMService config file (C:\Program Files\Microsoft Forefront Identity Manager\2010\Service\Microsoft.ResourceManagement.Service.exe.config) already contains inline comment on how to enable tracing. You can follow those steps.&lt;/p&gt;
&lt;p&gt;If you want to log everything, you can replace &amp;lt;system.diagnostics&amp;gt; section with the following.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Warning, the trace file gets really huge and the default EventLogTraceListener will be removed. You should revert your config after troubleshooting so that at least Error level traces are logged to the event log.&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="scroll"&gt;&lt;code class="html"&gt;&amp;lt;system.diagnostics&amp;gt;&lt;br /&gt;  &amp;lt;sources&amp;gt;&lt;br /&gt;    &amp;lt;source name="System.ServiceModel.MessageLogging" switchValue="Verbose,ActivityTracing"&amp;gt;&lt;br /&gt;      &amp;lt;listeners&amp;gt;&lt;br /&gt;        &amp;lt;add type="System.Diagnostics.DefaultTraceListener" name="Default"&amp;gt;&lt;br /&gt;          &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;        &amp;lt;/add&amp;gt;&lt;br /&gt;        &amp;lt;add name="ServiceModelMessageLoggingListener"&amp;gt;&lt;br /&gt;          &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;        &amp;lt;/add&amp;gt;&lt;br /&gt;      &amp;lt;/listeners&amp;gt;&lt;br /&gt;    &amp;lt;/source&amp;gt;&lt;br /&gt;    &amp;lt;source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"&lt;br /&gt;      propagateActivity="true"&amp;gt;&lt;br /&gt;      &amp;lt;listeners&amp;gt;&lt;br /&gt;        &amp;lt;add type="System.Diagnostics.DefaultTraceListener" name="Default"&amp;gt;&lt;br /&gt;          &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;        &amp;lt;/add&amp;gt;&lt;br /&gt;        &amp;lt;add name="ServiceModelTraceListener"&amp;gt;&lt;br /&gt;          &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;        &amp;lt;/add&amp;gt;&lt;br /&gt;      &amp;lt;/listeners&amp;gt;&lt;br /&gt;    &amp;lt;/source&amp;gt;&lt;br /&gt;    &amp;lt;source name="Microsoft.ResourceManagement" switchValue="Verbose,ActivityTracing"&amp;gt;&lt;br /&gt;      &amp;lt;listeners&amp;gt;&lt;br /&gt;        &amp;lt;add type="System.Diagnostics.DefaultTraceListener" name="Default"&amp;gt;&lt;br /&gt;          &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;        &amp;lt;/add&amp;gt;&lt;br /&gt;        &amp;lt;add name="ServiceModelTraceListener"&amp;gt;&lt;br /&gt;          &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;        &amp;lt;/add&amp;gt;&lt;br /&gt;      &amp;lt;/listeners&amp;gt;&lt;br /&gt;    &amp;lt;/source&amp;gt;&lt;br /&gt;  &amp;lt;/sources&amp;gt;&lt;br /&gt;  &amp;lt;sharedListeners&amp;gt;&lt;br /&gt;    &amp;lt;add initializeData="&lt;span style="background-color: #ffff00;"&gt;C:\Logs\Microsoft.ResourceManagement.Service_messages.svclog&lt;/span&gt;"&lt;br /&gt;      type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;br /&gt;      name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"&amp;gt;&lt;br /&gt;      &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;    &amp;lt;/add&amp;gt;&lt;br /&gt;    &amp;lt;add initializeData="&lt;span style="background-color: #ffff00;"&gt;C:\Logs\Microsoft.ResourceManagement.Service_tracelog.svclog&lt;/span&gt;"&lt;br /&gt;      type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&lt;br /&gt;      name="ServiceModelTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack"&amp;gt;&lt;br /&gt;      &amp;lt;filter type="" /&amp;gt;&lt;br /&gt;    &amp;lt;/add&amp;gt;&lt;br /&gt;  &amp;lt;/sharedListeners&amp;gt;&lt;br /&gt;  &amp;lt;trace autoflush="true" /&amp;gt; &lt;br /&gt;&amp;lt;/system.diagnostics&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class="scroll"&gt;&lt;code class="html"&gt;&amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;  &amp;lt;diagnostics&amp;gt;&lt;br /&gt;    &amp;lt;messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" /&amp;gt;&lt;br /&gt;  &amp;lt;/diagnostics&amp;gt;&lt;br /&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;For FIMPortal, the config file is at C:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config. You will need to change the highlighted filename to something else. For example, use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ILMPortal.Client_messages.svclog&lt;/li&gt;
&lt;li&gt;ILMPortal.Client_tracelog.svclog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;i&gt;*_tracelog.svclog&lt;/i&gt; contains all the FIM specific traces instrumented by the FIM team (you will spend 99% of your time with this file). On the other hand, &lt;i&gt;*_messages.svclog&lt;/i&gt; contains WCF specific traces.&lt;/p&gt;
&lt;h1&gt;How to Get Rid of the Generic FIMPortal Error Page?&lt;/h1&gt;
&lt;p&gt;When there is an error in FIMPortal, you will see the follow screen which absolutely contains no useful information at all.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://lh6.ggpht.com/_ogW55ub7GXo/TBlEUukS31I/AAAAAAAAAL8/N6HS45jt7Dk/s1600/image%5B5%5D.png" style="max-width: 550px; border: 0pt none;" height="418" width="640" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://setspn.blogspot.com/2010/06/fim-2010-enable-advanced-error-logging.html"&gt;Thomas Vuylsteke has blogged about how to get rid of hat&lt;/a&gt; to get a full stack trace which is usually enough for you to troubleshoot FIMPortal issues.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3358637" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/FIMPortal/">FIMPortal</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Debug/">Debug</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Diagnostic/">Diagnostic</category><category domain="http://blogs.technet.com/b/aho/archive/tags/FIMService/">FIMService</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset+Client/">Password Reset Client</category></item><item><title>How Does Lockout Gate Work</title><link>http://blogs.technet.com/b/aho/archive/2010/04/29/how-does-lockout-gate-work.aspx</link><pubDate>Thu, 29 Apr 2010 00:34:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3329343</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3329343</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2010/04/29/how-does-lockout-gate-work.aspx#comments</comments><description>&lt;p&gt;I am back! I haven't forgotten you all. I was just busying with RTM Update 1 which is now live on Microsoft Update.&lt;br&gt;&lt;/p&gt;&lt;p&gt;In &lt;a href="http://blogs.technet.com/ControlPanel/Blogs/Forefront%20Identity%20Manager%20-%20Credential%20Management,%20Part%202" mce_href="http://blogs.technet.com/ControlPanel/Blogs/Forefront Identity Manager - Credential Management, Part 2"&gt;Forefront Identity Manager - Credential Management, Part 2&lt;/a&gt;, i talked about what Lockout Gate is capable of doing and in the &lt;a href="http://technet.microsoft.com/en-us/library/ee534892%28WS.10%29.aspx" mce_href="http://technet.microsoft.com/en-us/library/ee534892%28WS.10%29.aspx"&gt;Password Reset Deployment Guide&lt;/a&gt;, it mentions if you put the Lockout Gate as the first gate, there is the possibility of DoS attack and the mitigation is to put a QA gate in front of the Lockout Gate.&lt;/p&gt;&lt;p&gt;I have received a couple inquiries regarding that point and I realize the documentation never explains how Lockout Gate works and why the ordering/position of the Lockout Gate relative to other gates matters. This post is trying to address them.&lt;/p&gt;&lt;p&gt;&lt;b&gt;How it works&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Each gate can be interactive (requires user interaction) or non-interactive; and regardless of which type of gate it is, gates are executed in sequential order one after each other. Lockout Gate is an non-interactive gate and it does the followings:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;It checks if the user is temporarily locked out. If yes, the authentication will fail and the user would receive an error message. Notice if the user is permanently locked out, the request processor will kick the user out in earlier stages and will never hit the Lockout Gate.&lt;/li&gt;&lt;li&gt;Increments the lockout counter for the specific user.&lt;/li&gt;&lt;li&gt;Temporarily or permanently lockout the user if necessary based on the updated counter.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;It also registers itself to the workflow's &lt;a href="http://msdn.microsoft.com/en-us/library/system.workflow.activities.sequentialworkflowactivity.completed.aspx" mce_href="http://msdn.microsoft.com/en-us/library/system.workflow.activities.sequentialworkflowactivity.completed.aspx"&gt;Completed&lt;/a&gt; event, when signaled, will unlock the user.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Why ordering matters&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Consider if you have &lt;i&gt;Lockout -&amp;gt; QA&lt;/i&gt; in the AuthN WF, a malicious user can initiate SSPR for EmployeeA and intentionally fail the QA gate to permanently lockout EmployeeA. By changing the AuthN WF to &lt;i&gt;QA -&amp;gt; Lockout -&amp;gt; QA&lt;/i&gt;, the Lockout Gate will not be hit unless the malicious use passes the first QA Gate. Please note that in this case, the first QA Gate is not protected by the Lockout Gate and is subjected to brute force attack. That is the price you have to pay to prevent DoS using Lockout Gate. You should work with your security compliance team in your organization to decide what is right for your company.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Common mistakes&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Once a while, I get feedback saying "I have failed the QA Gate many many times but the lockout logic does not kick in".&lt;/p&gt;&lt;p&gt;Usually that is because the Lockout Gate is sequenced at the end of the AuthN WF. Now since you know how Lockout Gate works, it is obvious that by putting it at the end of the AuthN WF, the internal counter of the lockout gate will be incremented but reset back to zero immediately after that.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;FAQ: Why &lt;/b&gt;&lt;b&gt;would &lt;/b&gt;&lt;b&gt;canceling out from the QA Gate increment the lockout count&lt;/b&gt;&lt;/p&gt;&lt;p&gt;While it is true that you never fail the QA Gate, the lockout count is not kept in the QA gate. Thus, when you see the QA Gate, the lockout count has already been incremented (and in fact, the user is temp/perm locked out already). So it is not failing or canceling the QA Gate (or any gate) that increments the count, it is the fact that executing the non-interactive Lockout Gate increments the count.&lt;br&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3329343" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Gate/">Gate</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Authentication/">Authentication</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Lockout/">Lockout</category></item><item><title>Call for Topics</title><link>http://blogs.technet.com/b/aho/archive/2010/03/18/call-for-topics.aspx</link><pubDate>Thu, 18 Mar 2010 07:37:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3319750</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3319750</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2010/03/18/call-for-topics.aspx#comments</comments><description>Is there anything in particular that you want to know more? Leave me a message :P&lt;br&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3319750" width="1" height="1"&gt;</description></item><item><title>Self-Service Password Reset to Non-Active Directory System</title><link>http://blogs.technet.com/b/aho/archive/2010/01/29/self-service-password-reset-to-non-active-directory-system.aspx</link><pubDate>Fri, 29 Jan 2010 21:20:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3309426</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3309426</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2010/01/29/self-service-password-reset-to-non-active-directory-system.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;Background:&lt;/b&gt;&lt;br&gt; I often come across two types of questions in both internal and external channels&lt;br&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How can I leverage SSPR and reset a password for a non-AD account (e.g. MSSQL, HR or .NET Passport)?&lt;/li&gt;&lt;li&gt;How can I implement password filters but do so in FIM instead of AD?&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For #1, PCNS together with FIM Synchronization Service and your custom MA might do the magic. The side effect is that both your AD and external system's password will be reset. So if you want to keep the passwords different or find it too much trouble to write your custom MA, then this option is out.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;The official answer is NO&lt;/b&gt; because the SSPR client is closely tied together with the &lt;i&gt;Active Directory Password Reset Activity&lt;/i&gt; and using the SSPR client to interact with any other Password Reset activity is not supported.&lt;/p&gt;&lt;p&gt;&lt;b&gt;However&lt;/b&gt;, if you are an enthusiast and want to explore the unsupported territory by writing a custom &lt;i&gt;External Password Reset Activity&lt;/i&gt;, you can reuse the ReadResourceActivity and XmlInteractiveActivity shipped with FIM to achieve that. High level implementation consists of the following steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Add an XmlInteractiveActivity. This activity knows how to commuticate with this activity.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Set EnableDefaultOperationValidation and ValidateSamlToken to true.&lt;/li&gt;&lt;li&gt;Set EndpointAccessUserList to be the Guid of Anonymous User&lt;br&gt;&lt;/li&gt;&lt;li&gt;Set DocumentType to typeof(PWResetRequestData)&lt;/li&gt;&lt;li&gt;Add a handler to XmlDocumentValidation in which you will implement your password reset logic. The user password can be obtained by ((PWResetRequestData)e.XmlDocument).NewPassword&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;At this point, you don't have access to the Domain\Username of the user. To do so, add an ReadResourceActivity &lt;b&gt;before&lt;/b&gt; the XmlInteractiveActivity.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Set ActorId and ResourceId to the current user.&lt;/li&gt;&lt;li&gt;Set EndpointAccessUserList to be Domain and AccountName&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Now your activity would have access to Domain\Username as well as the new password. Do whatever you want with them. Resulting activity will look like:&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3309663/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3309663/original.aspx" width="296" height="356"&gt;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;This sample is a mock activity that does not reset password to any system. It merely returns success/failure of your choice and you have to implement your password reset logic. It does not have any error handling or retry logic (You probably want to use the WhileActivity). However, it demonstrates how one might to go about addressing the two problems mention above.&lt;/p&gt;&lt;p&gt;Feel free to download the source code and play with it.&lt;br&gt;&lt;/p&gt;&lt;p&gt;P.S. You have to click into this post to see the attachment. &lt;br&gt;&lt;/p&gt;&lt;i&gt;&lt;b&gt;WARNING:
THIS CUSTOM CREDENTIAL PROVIDER IS NOT SUPPORTED AND IS PROVIDED AS IS
WITHOUT ANY WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.&lt;/b&gt;&lt;/i&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3309426" width="1" height="1"&gt;</description><enclosure url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-03-30-94-26/ExternalPasswordReset.zip" length="23322" type="application/x-zip-compressed" /><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category></item><item><title>Custom Credential Provider for Password Reset</title><link>http://blogs.technet.com/b/aho/archive/2009/11/15/custom-credential-provider-for-password-reset.aspx</link><pubDate>Sun, 15 Nov 2009 07:32:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3293923</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3293923</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2009/11/15/custom-credential-provider-for-password-reset.aspx#comments</comments><description>&lt;p&gt;The credential provider for Password Reset is fairly simply and straight forward. Since I have joined the team, there is very little code change in that area. Recently, we decided to fix some minor known bug in the credential provider (CP) and I realized I don't know too much about how CP works.&lt;/p&gt;&lt;p&gt;So I&amp;nbsp; downloaded the samples in Windows SDK and played with it. After some time, I came up with the following.&lt;/p&gt;&lt;p&gt;Notice the extra tile at logon screen&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3293924/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3293924/original.aspx" width="545" height="174"&gt; &lt;br&gt;&lt;/p&gt;&lt;p&gt;... and after you click on the tile.&lt;br&gt;&amp;nbsp;&lt;img src="http://blogs.technet.com/photos/aho/images/3293925/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3293925/original.aspx"&gt;&lt;/p&gt;&lt;p&gt;Feel free to download the source code and play with it. The zip file contains x86 and x64 release builds.&lt;/p&gt;&lt;p&gt;&amp;nbsp;P.S. You have to click into this post to see the attachment. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;b&gt;WARNING: THIS CUSTOM CREDENTIAL PROVIDER IS NOT SUPPORTED AND IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.&lt;/b&gt;&lt;/i&gt;&lt;br&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3293923" width="1" height="1"&gt;</description><enclosure url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-03-29-39-23/CustomCP.zip" length="101767" type="application/zip" /><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Provider/">Credential Provider</category></item><item><title>Forefront Identity Manager - Credential Management, Part 4</title><link>http://blogs.technet.com/b/aho/archive/2009/11/09/forefront-identity-manager-credential-management-part-4.aspx</link><pubDate>Mon, 09 Nov 2009 06:27:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3292392</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>20</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3292392</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2009/11/09/forefront-identity-manager-credential-management-part-4.aspx#comments</comments><description>&lt;p&gt;This post talks about how client interacts with the server during the course of Self-Service Password Reset Registration and Reset. Majority of the information can be found from either client-side or server-side log. The implementation is subjected to change. If you were to develop a custom SSPR client based on the information below, please make sure what you do is supported.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Deep Dive into Self-Service Password Reset&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Components and terminologies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gate Framework (GF), client side unmanaged component. It handles the UI of varies gates and the password reset screen.&lt;/li&gt;
&lt;li&gt;PasswordProxy (Proxy), aka FIMPasswordReset, client side managed component. It acts as a proxy between Gate Framework and FIM Service.&lt;/li&gt;
&lt;li&gt;FIM Service&lt;/li&gt;
&lt;li&gt;Secure Token Service (STS), a component of FIM Service that issues tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Communication channels used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Between Gate Framework (GF) and PasswordProxy uses namepipe because GF is native and PasswordProxy is managed.&lt;/li&gt;
&lt;li&gt;Between PasswordProxy and FIMService/STS uses WCF.&lt;/li&gt;
&lt;li&gt;Between FIMService and FIMSynchronizationService uses WMI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Registration Sequence&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;C:\Windows\System32\MsPwdRegistration.exe auto starts when user logon.&lt;/li&gt;
&lt;li&gt;It performs some housekeeping routines and call into GF to initiate the registration sequence.&lt;/li&gt;
&lt;li&gt;GF establishes a secured name pipe to Proxy.&lt;/li&gt;
&lt;li&gt;Proxy will then&lt;ol&gt;
&lt;li&gt;Lookup the user guid: /Person[Domain='...' and Account='...']&lt;/li&gt;
&lt;li&gt;Lookup all possible AuthN WFs that can be used by the user for SSPR&lt;br /&gt; /MPR[Disabled=false &amp;amp;&amp;amp; (PrincipalSet=Anonymous &amp;amp;&amp;amp; ResourceCurrentSet=/Set[ComputedMember='user guid']) &amp;amp;&amp;amp; ActionType='Modify' &amp;amp;&amp;amp; ActionParameter='ResetPassword']/AuthenticationWorkflowDefinition&lt;/li&gt;
&lt;li&gt;For each AuthN WF, determine if the user:&lt;ol&gt;
&lt;li&gt;Has registered or not (User.AuthNWFRegistered attribute).&lt;/li&gt;
&lt;li&gt;Is locked out or not (User.AuthNWFLockedout attribute).&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Return to GF with one of the value:&lt;ol&gt;
&lt;li&gt;Registration required, when one or more AuthN WFs is not registered.&lt;/li&gt;
&lt;li&gt;LockedOut, when user is locked out of one or more AuthN WFs.&lt;/li&gt;
&lt;li&gt;Registration Optional otherwise.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;If the return value is not Registration Optional, GF will display the Registration Welcome Screen.&lt;/li&gt;
&lt;li&gt;To register, Proxy sends a Put request to add the AuthN WF Guid to User.AuthNWFRegistered.&lt;/li&gt;
&lt;li&gt;This request will trigger the AuthN WF "System Workflow Required for Registration" caused by MPR "General workflow: Registration initiation for authentication activity" and Proxy will receive an AuthNRequiredFault.&lt;/li&gt;
&lt;li&gt;The AuthN fault contains the endpoint address of STS that the client needs to talk to to obtain a token.&lt;/li&gt;
&lt;li&gt;Proxy then relays message between GF and STS. STS will send a list of challenges (e.g. Q&amp;amp;A) and GF will display the questions and reply back with the answers that user inputs, etc etc.&lt;/li&gt;
&lt;li&gt;At the end of the challenge-response sequence with the STS, STS will issue a token indicating the User has passed the AuthN WF.&lt;/li&gt;
&lt;li&gt;Proxy then &lt;i&gt;resumes&lt;/i&gt; the original request with the STS token.&lt;/li&gt;
&lt;li&gt;After that, the request goes through the normal AuthZ, Commit and Action phases.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Reset Sequence&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User clicks on the "Reset Password" link on the logon screen.&lt;/li&gt;
&lt;li&gt;Gina/Credential Provider calls into GF to initiate the reset sequence.&lt;/li&gt;
&lt;li&gt;GF establishes a secure channel with Proxy.&lt;/li&gt;
&lt;li&gt;Proxy sends a Put request which Modify User.ResetPassword attribute.&lt;/li&gt;
&lt;li&gt;This request will trigger the AuthN WF "Password Reset AuthN Workflow" caused by MPR "Anonymous users can reset their password"  and Proxy will receive an AuthNRequiredFault.&lt;/li&gt;
&lt;li&gt;Proxy then obtains a STS token and resumes the request just like during registration.&lt;/li&gt;
&lt;li&gt;The request goes through the normal AuthZ, Commit and Action phases.&lt;/li&gt;
&lt;li&gt;During Action phase, it will kick off Action WF "Password Reset Action Workflow".&lt;/li&gt;
&lt;li&gt;This workflow will listen on an endpoint awaiting user to input their new password.&lt;/li&gt;
&lt;li&gt;Once the Password Reset Action Workflow receives the new password, it will, under the FIMService service account context, make a WMI call to the FIMSynchronizationService to perform a SetPassword.&lt;/li&gt;
&lt;li&gt;FIMSynchronizationService, under the AD MA account context, will talk to the primary domain controller (PDC) to reset the user password.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That's it. Feel free to leave me a message if you need clarification.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3292392" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category></item><item><title>Forefront Identity Manager - Credential Management, Part 3</title><link>http://blogs.technet.com/b/aho/archive/2009/10/20/forefront-identity-manager-credential-management-part-3.aspx</link><pubDate>Tue, 20 Oct 2009 10:42:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3287847</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3287847</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2009/10/20/forefront-identity-manager-credential-management-part-3.aspx#comments</comments><description>&lt;p&gt;In RC0, setting up Password Reset is a painful process for many of you (including myself). In RC1, we ship FIM with all the MPRs, along with the supporting sets and workflows, you will need for SSPR.&lt;/p&gt;&lt;p&gt;Today I am going to talk about why we need each one of them.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;General: Users can read non-administrative configuration resources&lt;/li&gt;&lt;li&gt;User management: Users can read attributes of their own&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;These two MPRs are not Password Reset specific. They are needed to allow normal user to navigate the portal.&lt;br&gt;The first MPR grants users permission to read non-admin configuration objects which includes but not limited to NavBar Configuration (left side of the portal), Homepage Configuration (middle and right side of the portal) and Search Scopes (the search box on top of the homepage).&lt;br&gt;The second MPR grants users permission to read their own info such as DisplayName. This is needed because we want to display a nice warm welcoming message to the user (i.e. Welcome, John Doe).&lt;/p&gt;There are 4 Password Reset specific MPRs&lt;br&gt;&lt;ol&gt;&lt;li&gt;Anonymous users can reset their password&lt;br&gt;This MPR grants users permission to initiate a SSPR request. This also specify which Authentication Workflow(s) should be used.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Password reset users can read password reset objects&lt;br&gt;In order for the system to prompt you register for Password Reset, it needs to know if an user is eligible for that. It is done by:&lt;br&gt;&lt;ol&gt;&lt;li&gt;Loop through all MPRs&lt;/li&gt;&lt;li&gt;Find the &lt;i&gt;enabled&lt;/i&gt; ones that grants &lt;i&gt;Anonymous Users modify&lt;/i&gt; permission on the &lt;i&gt;Reset Password&lt;/i&gt; attribute &lt;br&gt;
  &lt;/li&gt;&lt;li&gt;Further filter the results to make sure the user is a member of the target resources set&lt;/li&gt;&lt;li&gt;Get the Authentication Workflows from the MPRs&lt;/li&gt;&lt;/ol&gt;Then the client will prompt users to register for those AuthN WFs.&lt;br&gt;Obviously, users need permission to read lots of attributes in order to perform the steps above. This MPR allows that to happen.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Password Reset Users can update the lockout attributes of themselves&lt;br&gt;Lockout gate adds a few references to the User object. For example, if the user is locked out, the Workflow guid is added to User.&lt;i&gt;AuthNWFLockedOut&lt;/i&gt;. Also the lockout gate registration object's guid is also added to &lt;i&gt;User.AuthNLockoutRegistrationID&lt;/i&gt; to facilitate finding the object. This MPR grants the permission needed for that specific reason. The principal set is relative to resource object's ResourceID so that one can modify their own attribute.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Users can create registration objects for themselves&lt;br&gt;For obvious reason, FIM needs to store the QA registration data (for QA
gate), number of failed attempts (for lockout gate). All those data are
stored as Gate Registration objects. (4) grants users permission to
create and modify gate registration objects. (Though the name only
mention &lt;i&gt;create&lt;/i&gt;, it's also granting &lt;i&gt;modify&lt;/i&gt; permission).
The principal set is relative to the resource object's UserID because
we don't want UserA to be able to create gate registration for UserB
(i.e. UserA registers for UserB).&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3287847" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Management+Policy+Rule/">Management Policy Rule</category></item><item><title>Forefront Identity Manager - Credential Management, Part 2</title><link>http://blogs.technet.com/b/aho/archive/2009/10/04/forefront-identity-manager-credential-management-part-2.aspx</link><pubDate>Sun, 04 Oct 2009 09:21:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3284735</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3284735</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2009/10/04/forefront-identity-manager-credential-management-part-2.aspx#comments</comments><description>&lt;p&gt;FIM ships with three Authentication Activities (a.k.a. Authentication Gates) that are used primarily in Self-Service Password Reset (SSPR). &lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Question and Answer Gate&lt;br&gt;&lt;/b&gt;This is the most obviously one in SSPR. During registration mode, it prompts the user with a list of pre-defined questions (e.g. What's your first pet's name?) The user is required to answer a subset of the questions. The answers are hashed and stored in the FIM database. During authentication mode, it display the questions that the user has registered for and the user is required to answer them correctly to pass this gate.&lt;/p&gt;&lt;p&gt;Configurable settings includes&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Total number of questions: &lt;i&gt;n&lt;/i&gt;&lt;br&gt;System admin can pre-defined &lt;i&gt;n&lt;/i&gt; questions in this gate.&lt;/li&gt;&lt;li&gt;Number of questions displayed during registration: &lt;i&gt;p&lt;/i&gt;&lt;br&gt;Only &lt;i&gt;p&lt;/i&gt; out of &lt;i&gt;n&lt;/i&gt; questions are displayed randomly to users during registration.&lt;/li&gt;&lt;li&gt;Number of questions required for registration: &lt;i&gt;q&lt;/i&gt;&lt;br&gt;Users must register at least &lt;i&gt;q&lt;/i&gt; out of &lt;i&gt;p&lt;/i&gt; questions during registration.&lt;/li&gt;&lt;li&gt;Number of questions randomly presented to the user: &lt;i&gt;r&lt;/i&gt;&lt;br&gt;
Please bare with me unclear wording. It means &lt;i&gt;r&lt;/i&gt; out of the &lt;i&gt;q&lt;/i&gt; questions that the user registered with will be presented during authentication.&lt;br&gt;
  &lt;/li&gt;&lt;li&gt;Number of questions that must be answered correctly: &lt;i&gt;s&lt;/i&gt;&lt;br&gt;
Users must answer &lt;i&gt;s&lt;/i&gt; out of &lt;i&gt;r&lt;/i&gt; questions correctly to pass this gate.&lt;/li&gt;&lt;/ul&gt;And obviously, n &amp;gt; p &amp;gt; q &amp;gt; r &amp;gt; s&lt;p&gt;&lt;b&gt;Password Gate&lt;br&gt;&lt;/b&gt;The most common question I have been asked is that, "I try to reset my password because I have forgotten it. Now you are going to ask for my password?" This is not how the password gate works. Password Gate asks for your password &lt;u&gt;during registration only&lt;/u&gt;. For example, if you go to bathroom and forget to lock your computer, you probably don't want someone else to register on your behave and reset your password immediately. It allows FIM to make sure it is you that are registering for password reset.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Lockout Gate&lt;/b&gt;&lt;br&gt;The lockout gate is used to prevent malicious hackers from doing a brute force attack. This gate does not display anything to the user during registration or authentication.&lt;br&gt;&lt;/p&gt;&lt;p&gt;It is best using the example below to explain how it works&lt;br&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Lockout duration after Lockout Threshold is reached (minutes): 15&lt;/li&gt;&lt;li&gt;Lockout Threshold - number of times the user can fail to complete the workflow: 3&lt;/li&gt;&lt;li&gt;Number of times the user can reach the Lockout Threshold before permanently lockout: 2&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The net effect will be as follow:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Failed attempt 1&amp;nbsp;&lt;/li&gt;&lt;li&gt;Failed attempt 2&lt;/li&gt;&lt;li&gt;Failed attempt 3&lt;/li&gt;&lt;li&gt;Now the user is temporarily locked out and can only try again after 15 minutes&lt;/li&gt;&lt;li&gt;Failed attempt 4&lt;/li&gt;&lt;li&gt;Failed attempt 5&lt;br&gt;&lt;/li&gt;&lt;li&gt;Failed attempt 6&lt;br&gt;&lt;/li&gt;&lt;li&gt;Now the user is permanently locked out.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;At any point of time, if the user successfully passes the entire authentication workflow or re-register, the counters are reset to 0 and unlocked automatically.&lt;/p&gt;&lt;p&gt;Please note that lockout mechanism is FIM specific. It has nothing to do with the "User Lockout" in Active Directory.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3284735" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Gate/">Gate</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Authentication/">Authentication</category><category domain="http://blogs.technet.com/b/aho/archive/tags/QA/">QA</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Lockout/">Lockout</category></item><item><title>Forefront Identity Manager - Credential Management, Part 1</title><link>http://blogs.technet.com/b/aho/archive/2009/10/01/forefront-identity-manager-credential-management-part-1.aspx</link><pubDate>Thu, 01 Oct 2009 02:59:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3284237</guid><dc:creator>AnthonyHo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/aho/rsscomments.aspx?WeblogPostID=3284237</wfw:commentRss><comments>http://blogs.technet.com/b/aho/archive/2009/10/01/forefront-identity-manager-credential-management-part-1.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Background&lt;/span&gt;&lt;br&gt;Nowadays, for most companies, if an employee forgets his password, very likely he would need to call help desk to reset the password for him. FIM helps enterprise reduce help desk cost by providing "Self-Service Password Reset" (SSPR).&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Scenario&lt;/span&gt;&lt;br&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;After deployment, employee will be prompted to answer a list of questions (e.g. "What's the name of your first pet") defined by system admin upon logging on to the machine.&lt;/li&gt;
&lt;li&gt;After a nice long Christmas, he goes back to work and has forgotten his password.&lt;/li&gt;
&lt;li&gt;He will be stuck at the logon screen and notice there is a new "Reset Password" link.&lt;/li&gt;
&lt;li&gt;Upon clicking on the link, he will be prompted for a list of questions he previously registered with in step (1).&lt;/li&gt;
&lt;li&gt;If he answers the questions correctly, he will be prompted to input his new password.&lt;/li&gt;
&lt;li&gt;He submits his new password (which has to be complied with the corporate policy).&lt;/li&gt;
&lt;li&gt;He can then logon to his machine with the new password and continue to work.&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Screenshots&lt;/b&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Registration&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Welcome Screen&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284233/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284233/original.aspx"&gt;&lt;br&gt;&lt;/li&gt;
&lt;li&gt;Password Gate. It asks for your password. You don't want someone else to register for you while you are not at your machine right?&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284231/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284231/original.aspx" width="640" height="480"&gt;&lt;/li&gt;
&lt;li&gt;QA Gate. Hm... Who is my favorite author? Let me think...&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284232/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284232/original.aspx" width="640" height="480"&gt;&lt;/li&gt;
&lt;li&gt;That's it. Pretty easy huh.&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284230/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284230/original.aspx" width="640" height="480"&gt;&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;Reset&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;I don't remember my password. Let's click on the &lt;b&gt;Reset Password&lt;/b&gt; link in logon screen.&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284229/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284229/original.aspx" width="337" height="342"&gt;&lt;/li&gt;
&lt;li&gt;I don't remember my first pet's name. Luckily, I do remember the others.&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284236/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284236/original.aspx" width="640" height="479"&gt;&lt;/li&gt;
&lt;li&gt;What do I want for my new password?&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284234/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284234/original.aspx" width="640" height="480"&gt;&lt;/li&gt;
&lt;li&gt;Wow, I can't believe it is that easy and fast.&lt;br&gt;&lt;img src="http://blogs.technet.com/photos/aho/images/3284235/original.aspx" mce_src="http://blogs.technet.com/photos/aho/images/3284235/original.aspx" width="641" height="480"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/ol&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3284237" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/b/aho/archive/tags/Forefront+Identity+Manager/">Forefront Identity Manager</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Password+Reset/">Password Reset</category><category domain="http://blogs.technet.com/b/aho/archive/tags/Credential+Management/">Credential Management</category></item></channel></rss>
