<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1228406991075550547</id><updated>2012-02-15T22:27:02.424-08:00</updated><title type='text'>Andy´s Microsoft IAG and Forefront Blog</title><subtitle type='html'>This blog contains Articles about the Microsoft Forefront Technologies, especially Intelligent Application Gateway (IAG), ISA Server and Forefront Server and Client Security.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-5302762321778146408</id><published>2011-08-31T14:52:00.001-07:00</published><updated>2011-09-02T05:10:00.472-07:00</updated><title type='text'>UAG–How to access Remote Desktop Web Access using SSO</title><content type='html'>&lt;p align="justify"&gt;UAG offers a a very smart way to integrate Remote Desktop RemoteApps into the UAG portal. For different reasons many customers want to publish the Remote Desktop Web Access Application for their portal users as a link in the portal home. However, the Remote Desktop Web Application uses forms-based authentication by default, that means the UAG logon credentials need to be delegated to the RDWeb Application using the Formular Engine delivered by UAG. In this post i like to describe the steps needed to publish RDWeb Acces into the UAG portal and provide single-sign-on to the RDWeb Application using the formular engine. There is a solution to configure RDWeb App to use Windows Integrated Authentication and to delegate Kerberos/NTLM credentials to the RDWeb App, but this is not part of this post at the moment.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;The Mission:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Setting up RDWebApp to work with UAG    &lt;br /&gt;2. Publish RDWebApp as an Other Web Application in UAG portal     &lt;br /&gt;3. Analyze the RDWeb App Login Form     &lt;br /&gt;4. Configure the UAG Formular Engine     &lt;br /&gt;5. See SSO working with RDWebApp&lt;/p&gt;  &lt;p&gt;So, let´s rock now!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Setting up RDWebApp to work with UAG&lt;/strong&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p align="justify"&gt;In my scenario, i installed a Windows Server 2008 R2 and assigned the roles Remote Desktop Session Host and Remote Desktop Web Acces on a single virtual box. After assigning the Remote Desktop Role and installing the Remote Desktop Web Application Role-Service you can notice, that RDWebApp is using a self signed certificate to use SSL encryption when you access the RDWebbApp Website. This leads to a certificate error displayed in the browser window if you try to access the RDWebApp. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-ko-vfgZrc4I/Tl6s9rmT1XI/AAAAAAAAAK0/K-2Xw9P-nUk/s1600-h/cert_error%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="cert_error" border="0" alt="cert_error" src="http://lh3.ggpht.com/-qpBcjhDUSM8/Tl6s-PCwqQI/AAAAAAAAAK4/IdAYGu0aI1s/cert_error_thumb.jpg?imgmax=800" width="244" height="98" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;So we need to swap the self signed certificate to a trusted certificate issued by a trusted certifiaction authority. For internal resources i used an Active Directory integrated certification authority and i requested a Webserver certificate from there. Keep in mind, that the common name of the certificate needs to match the servername you type into the publishing wizard in UAG! For example, if you use an address like rdserver.home.ahecker.net the common name of the certificate needs to be rdserver.home.ahecker.net. The certification authority issued the certificate needs to be trusted (which is automatically done, if you use an AD integrated CA) as a Trusted Root Certification Authority in the UAG certificate store. If you have difficulties in dealing with certificates, feel free to drop some lines in the comments section beyond this article and i will post a more detailed description in how to setup this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-X6dmQjEUpR0/Tl6s-4RGaII/AAAAAAAAAK8/vIbuqx41wps/s1600-h/cert_match%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="cert_match" border="0" alt="cert_match" src="http://lh4.ggpht.com/-mmJThZpzRTY/Tl6s_MLZuRI/AAAAAAAAALA/k29ubLuKQaI/cert_match_thumb.jpg?imgmax=800" width="163" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;If you request the RDWebApp from an internal Computer there should be no warings and the website should look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-fz3H75Mcyn8/Tl6s_1-VlEI/AAAAAAAAALE/jpClXn17vJA/s1600-h/rdwebapp_trusted%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="rdwebapp_trusted" border="0" alt="rdwebapp_trusted" src="http://lh4.ggpht.com/-q1TFp-viM-8/Tl6tAZXIohI/AAAAAAAAALI/gDYvt5wqBmM/rdwebapp_trusted_thumb.jpg?imgmax=800" width="244" height="83" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;As you can see no certificate warining is displayed anymore.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Publish RDWebApp as an Other Web Application in UAG portal&lt;/strong&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p align="justify"&gt;Open the UAG Management Console and click the Add button beyond the Applications section. Select Next to bypass the welcome message. In the Select Application Dialog change the default to Web and select the Other Web Application (portal hostname) template.&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-i2LpFNpw2-A/TmC3eowhC-I/AAAAAAAAALM/zdEnOX5DhcI/s1600-h/other_web_app%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="other_web_app" border="0" alt="other_web_app" src="http://lh6.ggpht.com/-3pMLfDz185Y/TmC3fdtoi5I/AAAAAAAAALQ/TC00IocVBpI/other_web_app_thumb.jpg?imgmax=800" width="193" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Click Next. In the Application Name Textbox enter a name for the published Application like Remote Desktop Website and enter an Application Type for example RDWEB. We will need the Application Type in later steps and it is used in XML-Files. Remember that XML is case-sensitive so keep the spelling of your Application Type in mind.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-lScNgZ8X8io/TmC3f_H2EPI/AAAAAAAAALU/nDIdUOV5Evs/s1600-h/app_type%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="app_type" border="0" alt="app_type" src="http://lh5.ggpht.com/-OlR08-C8j3M/TmC3gdonvtI/AAAAAAAAALY/DcT6LKC8Erc/app_type_thumb.jpg?imgmax=800" width="194" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Click Next. In the Select Endpoint Policies Dialog change the Access Policy to Always. This is done for testing purposes only and i do not recommend you to use this as an option in your production environment. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-VsDqh0Ltyhs/TmC3g-oILvI/AAAAAAAAALc/__1C6LUuNOA/s1600-h/access_policy%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="access_policy" border="0" alt="access_policy" src="http://lh5.ggpht.com/-E1VtK0tTp3Y/TmC3hSfTTVI/AAAAAAAAALg/c1jtoLm2M-g/access_policy_thumb.jpg?imgmax=800" width="194" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Click Next. In the Deploy an Application Dialog select Configure an Application Server because we are using a single webserver. In the Web Servers Dialog select the IP/Host-Option and enter the servername into the Adresses list. The servername entered here needs to match the common name of the webserver certificate that is used by IIS on the Remote Desktop Web Access Website. In the Paths list enter the url path to the Remote Desktop Web Access website. By default this is /RDweb/*. Keep the defaults for HTTP and HTTPS Ports.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Kw76QhcmQIM/TmC3h2NRIgI/AAAAAAAAALk/GWFQmaoluf8/s1600-h/webservers%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="webservers" border="0" alt="webservers" src="http://lh5.ggpht.com/-QGL7U3kw1_0/TmC3iRp_JEI/AAAAAAAAALo/ZQcEawjF0tg/webservers_thumb.jpg?imgmax=800" width="194" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Click Next. In the Authentication Dialog enable the Use SSO checkbox and select your authentication source. In my case i configured my Domain Controller as an authentication source for portal and application access. As the Remote Desktop Web Access Website uses HTML-Form authentication select the HTML-Form option to delegate the user credentials.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-VEhNFods7Ws/TmC3i7XYlGI/AAAAAAAAALs/17HeyHGs188/s1600-h/sso%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sso" border="0" alt="sso" src="http://lh4.ggpht.com/-eja0GnsQkDU/TmC3jZ3SsbI/AAAAAAAAALw/fv7T2PGikL4/sso_thumb.jpg?imgmax=800" width="194" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Click Next. In the Portal Link Dialog click next. In the Authorization Dialog click next. Click Finish to close the Wizard. In the UAG Management Console click the gear icon to activate your configuration. From a client PC logon to the portal an notice, that the Remote Desktop Web Access Website is visible as a new application in your portal.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-yJTvujM4pVA/TmC3j92K_-I/AAAAAAAAAL0/Vt7VQuHD7i4/s1600-h/portal_link%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="portal_link" border="0" alt="portal_link" src="http://lh5.ggpht.com/-NmJhWW5ujnU/TmC3kQOP8JI/AAAAAAAAAL4/fdg6Ox6Po40/portal_link_thumb.jpg?imgmax=800" width="244" height="95" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;If you hit the link your browser is redirected to the login page of the Remote Desktop Web Access website. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-D5vYFrkpF8M/TmC3k6tFswI/AAAAAAAAAL8/sLGfjoO8aiY/s1600-h/rdweb_login%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="rdweb_login" border="0" alt="rdweb_login" src="http://lh5.ggpht.com/-XsC8nYSO4nc/TmC3lvhy9II/AAAAAAAAAMA/QPKUnJmisMc/rdweb_login_thumb.jpg?imgmax=800" width="244" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Analyzing the RDWeb App Login Form&lt;/strong&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p align="justify"&gt;With the login form opend in the browser we can do some visual analysis about the content of the form. There are two textboxes, one for the userdomain\username and one for the password. Further there is a submit button to send the form. To identify the form elements we need to view the source code of the page. Right-click the form in the browser and select View source to open the source code view. We need to extract some more details to identify each element we need to create a custom form login. That UAG can identify the login page we need the name of the form and the method used to submit the data to the webserver. This information can be found in the &amp;lt;form&amp;gt;-Tag in the source code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-eW1BlYQbah0/TmC-6CizfwI/AAAAAAAAAME/oTl1pw39xYs/s1600-h/form_tag%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="form_tag" border="0" alt="form_tag" src="http://lh4.ggpht.com/-4nw3WPIG0nU/TmC-6vlZbGI/AAAAAAAAAMI/9XHtmOgyHvc/form_tag_thumb.jpg?imgmax=800" width="244" height="102" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;As we can see the name and id of the form is: FrmLogin and the method is: post. Now we need to identify the Textbox-Elements so we can search the source code for “type=text”. We need the id-Element of the User-Textbox and the id-Element of the Password-Textbox.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-Wt2uVRvIImQ/TmC-7SU13EI/AAAAAAAAAMM/s08A4gmw_00/s1600-h/textboxes%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="textboxes" border="0" alt="textboxes" src="http://lh3.ggpht.com/-a5kUiVFlq9A/TmC-7-ff9VI/AAAAAAAAAMQ/Ne9afi9gaO0/textboxes_thumb.jpg?imgmax=800" width="244" height="106" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Once we have found the Username and Password textboxes in the source code we can see that the Username-Textbox-ID=DomainUserName and the Password-Textbox-ID=UserPass. Now we need to identify the submit button so let´s search for an type=submit in the source code.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-IQjPLxUQ5o8/TmC-8SMFarI/AAAAAAAAAMU/JvgbilVl43o/s1600-h/submit%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="submit" border="0" alt="submit" src="http://lh4.ggpht.com/-RVz6UqN8YRo/TmC-85E4LXI/AAAAAAAAAMY/YSyECo9gdHg/submit_thumb.jpg?imgmax=800" width="244" height="44" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The id is: btnSignIn. Now we have gathered all information we need to configure the Fromular-Enging in UAG.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4. Configure the UAG Formular Engine&lt;/strong&gt;&lt;/p&gt;  &lt;hr /&gt;  &lt;p align="justify"&gt;Locate the folder&amp;#160; \von\Conf\WizardDefaults\FormLogin in your UAG installation path. If there is not already a folder named CustomUpdate create the folder and copy the file FormLoginCustom.xml to the CustomUpdate folder. Rename the file to FormLogin.xml inside the CustomUpdate folder. The structure should look like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-nIqRSkbaBe0/TmDDv6GG2xI/AAAAAAAAAMc/_uZybiwlFhA/s1600-h/custom_update2.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="custom_update" border="0" alt="custom_update" src="http://lh4.ggpht.com/-J4o5kuIddzU/TmDDwbnaNJI/AAAAAAAAAMg/1FM5PVVEFXk/custom_update_thumb.jpg?imgmax=800" width="244" height="44" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Open the file and remove all content. Edit the file and enter the xml-Code so that it exactly looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-_fdg-9EMllc/TmDDxAnz0FI/AAAAAAAAAMk/WQpg7wtrZdw/s1600-h/form_login_content%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="form_login_content" border="0" alt="form_login_content" src="http://lh6.ggpht.com/-XOTQ25VW3kA/TmDDxpkzvtI/AAAAAAAAAMo/FX5OoCtfMZc/form_login_content_thumb.jpg?imgmax=800" width="244" height="109" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Or simply cut and paste the content from here:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;WHLFILTFORMLOGIN&lt;/span&gt; &lt;span class="attr"&gt;ver&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;&amp;lt;!-- app_id added by configurator, dont edit --&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;APPLICATION&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;APPLICATION_TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;RDWEB&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;APPLICATION_TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;USAGE&lt;/span&gt; &lt;span class="attr"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;form_login&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PRIMARY_HOST_URL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;[CDATA[.*/RDWeb/Pages/en-US/login.aspx.*]]&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;PRIMARY_HOST_URL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SCRIPT_NAME&lt;/span&gt; &lt;span class="attr"&gt;source&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;data_definition&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;FormLoginSubmitStandard&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SCRIPT_NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;USER_AGENT&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AGENT_TYPE&lt;/span&gt; &lt;span class="attr"&gt;search&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;group&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;all_supported&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AGENT_TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;POLICY&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;multiplatform&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;POLICY&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;SCRIPT_NAME&lt;/span&gt; &lt;span class="attr"&gt;source&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;data_definition&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;FormLoginHandler&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;SCRIPT_NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;USER_AGENT&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LOGIN_FORM&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="rem"&gt;&amp;lt;!-- one of NAME or ID could be used. Value could be blank if no form search required --&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;FrmLogin&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;METHOD&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;POST&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;METHOD&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CONTROL&lt;/span&gt; &lt;span class="attr"&gt;handling&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;dummy_value&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;USER_NAME&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;DomainUserName&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DEF_VALUE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;sitedomain\siteusr&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DEF_VALUE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CONTROL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;CONTROL&lt;/span&gt; &lt;span class="attr"&gt;handling&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;dummy_value&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;PASSWORD&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;TYPE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;UserPass&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NAME&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;DEF_VALUE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;sitepass&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;DEF_VALUE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;CONTROL&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LOGIN_FORM&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;USAGE&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;APPLICATION&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;WHLFILTFORMLOGIN&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;/style&gt;As you can see, the information we gathered about the form is used to identify the form itself, the method , the textbox-controls and variables like sitedomain\siteusr and sitepass are used to fill in the values with the credentials of the logged in user. Keep in mind that xml is case sensitive. The &amp;lt;NAME&amp;gt;-Elements must match the form-elements exactly! Save the FromLogin.xml file and in UAG Management Console activate your configuration.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;5. See SSO working with RDWebApp&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;  &lt;hr /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Login to your Portal and click the Remote Desktop Web App link. You can see the RDWebApp Login Form by a fraction of second filled with dummy values. Then the form is automatically submitted an you are redirected to the Remote Desktop Website without using your credentials again.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-WE-p2o1PtmM/TmDGy2WEVvI/AAAAAAAAAMs/9Mz987AfC5o/s1600-h/rdwebapp_sso%25255B2%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="rdwebapp_sso" border="0" alt="rdwebapp_sso" src="http://lh6.ggpht.com/-gLaPwWaHmJ0/TmDGzYFcxQI/AAAAAAAAAMw/FHn6DKyvWv4/rdwebapp_sso_thumb.jpg?imgmax=800" width="244" height="176" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;SSO to RDWebApp is done now. Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-5302762321778146408?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/5302762321778146408/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=5302762321778146408' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5302762321778146408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5302762321778146408'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2011/08/uaghow-to-access-remote-desktop-web.html' title='UAG–How to access Remote Desktop Web Access using SSO'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-qpBcjhDUSM8/Tl6s-PCwqQI/AAAAAAAAAK4/IdAYGu0aI1s/s72-c/cert_error_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-3252408217352525117</id><published>2011-01-26T08:39:00.001-08:00</published><updated>2011-01-26T08:39:15.395-08:00</updated><title type='text'>Released - UAG SP1 Direct Access Configuration Guide by Shannon Fritz</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Shannon Fritz, a high quality UAG Expert has published a great configuration guide to setup Direct Access with UAG Servicepack 1. For all of you who are interested in building a lab solution or plan to implement the technology within the production environment i strongly recommend you to work yourself through this detailed and comprehensive configuration guide.&lt;/p&gt;  &lt;p&gt;The guide is available on Shannon´s blog: &lt;a href="http://blog.concurrency.com/infrastructure/uag-sp1-directaccess-configuration-guide/"&gt;http://blog.concurrency.com/infrastructure/uag-sp1-directaccess-configuration-guide/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Many thanks for this great work!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-3252408217352525117?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/3252408217352525117/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=3252408217352525117' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/3252408217352525117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/3252408217352525117'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2011/01/released-uag-sp1-direct-access.html' title='Released - UAG SP1 Direct Access Configuration Guide by Shannon Fritz'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-3222390037676565622</id><published>2011-01-26T08:29:00.001-08:00</published><updated>2011-01-26T08:29:01.517-08:00</updated><title type='text'>Released - Microsoft Forefront UAG 2010 Administrator’s Handbook</title><content type='html'>&lt;p&gt;   &lt;br /&gt;If you are looking for hands-on guides, concepts and planning guidelines or step-by-step instructions to configure and administer Microsoft Forefront UAG 2010 then Ben´s Administrator’s Handbook is the right book to start with. You will get in touch with terminology and various illustrations which show you the detailed steps you need to do. Reading this book will help you to improve your knowledge about this product in many ways and saves time to implement the features in your environment. &lt;/p&gt;  &lt;p&gt;Here are some of the topics covered in the book:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Understand how UAG can help your organization with secure remote access. &lt;/li&gt;    &lt;li&gt;Plan and design the integration of UAG into your unique environment. &lt;/li&gt;    &lt;li&gt;Create trunks and publish all kinds of applications on them.      &lt;br /&gt;Enable VPN access for multiple platforms. &lt;/li&gt;    &lt;li&gt;Design and implement DirectAccess for your organization. &lt;/li&gt;    &lt;li&gt;Manage endpoint security with advanced policies. &lt;/li&gt;    &lt;li&gt;Monitor, maintain and secure your Microsoft server. &lt;/li&gt;    &lt;li&gt;Integrate UAG with multiple infrastructures and platforms. &lt;/li&gt;    &lt;li&gt;Discover various types of applications UAG can publish, and how to publish them. &lt;/li&gt;    &lt;li&gt;Learn how to provide remote access to your users or partners using SSL technology. &lt;/li&gt;    &lt;li&gt;Take advantage of single sign-on with low administrative overhead and high security. &lt;/li&gt;    &lt;li&gt;Integrate UAG with existing authentication infrastructure like Active Directory. &lt;/li&gt;    &lt;li&gt;Gain knowledge of advanced endpoint management for ultimate security in a world of unknowns. &lt;/li&gt;    &lt;li&gt;Perform troubleshooting and solve problems like the pros.      &lt;br /&gt;Integrate UAG with AD FS V2 for maximum corporate flexibility and security. &lt;/li&gt;    &lt;li&gt;Discover how to publish Microsoft Office SharePoint Server 2007 and 2010 securely &lt;/li&gt;    &lt;li&gt;Find out how UAG interacts with TMG 2010 (the successor to ISA server 2004) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The book can be purchased here: &lt;a href="http://amazon.com/o/asin/1849681627"&gt;http://amazon.com/o/asin/1849681627&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Many thanks to the authors, great job!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-3222390037676565622?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/3222390037676565622/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=3222390037676565622' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/3222390037676565622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/3222390037676565622'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2011/01/released-microsoft-forefront-uag-2010.html' title='Released - Microsoft Forefront UAG 2010 Administrator’s Handbook'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-5164065877263344699</id><published>2010-10-19T14:55:00.001-07:00</published><updated>2010-10-27T16:58:01.228-07:00</updated><title type='text'>UAG–Enable SSO by passing user credentials to formular based Web Applications</title><content type='html'>&lt;p&gt;A lot of Web Applications like Sharepoint or Outlook Web Access make use of formular based user authentication. Some of these applications cannot be configured to use other authentication methods like Basic- or Windows-Authentication. In this case the user has to authenticate twice, one time to login to the portal, the second time, if he wants to start the published application inside the portal. Sharepoint for example can be configured to use the ASP.Net Membership Provider to authenticate external users with forms based authentication. UAG can also be configured to use ASP.Net Membership Provider to authenticate external users like i described in my post &lt;a href="http://microsoft-iag.blogspot.com/2010/10/uag-how-to-authenticate-users-against.html"&gt;here&lt;/a&gt;. Both applications use the same repository for authentication and we can use a feature called the Form Authentication Engine built into the UAG product to pass the credentials of the logged in user into the authentication form presented by Sharepoint and do an Autosubmit. Done so, we can bring SSO-Experience to our end-users.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Mission:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Setup an Intranet Sharepoint Site using Windows Authentication    &lt;br /&gt;2. Extend the Website to external Users using ASP.Net Membership     &lt;br /&gt;3. Publish the extranet Sharepoint Website via the UAG Portal     &lt;br /&gt;4. Configure the UAG Formular Engine to work with Sharepoint FBA     &lt;br /&gt;5. Test the result&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Setup an Intranet Sharepoint Site using Windows Authentication&lt;/strong&gt;&lt;/p&gt; &lt;strong&gt;   &lt;hr /&gt;&lt;/strong&gt;  &lt;p&gt;Start the Sharepoint 2010 Central Administration and select Application Management and click on Manage Web Applications. On the following WebSite click the New button to create a new Web Application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TMgx2GsSCFI/AAAAAAAAAH8/Lu4mOk3tJZ0/s1600-h/New_Web_App1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="New_Web_App1" border="0" alt="New_Web_App1" src="http://lh3.ggpht.com/_SudWT1XnUOo/TMgx3OW-FHI/AAAAAAAAAIA/vVHRGv6cYWM/New_Web_App1_thumb.jpg?imgmax=800" width="244" height="103" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Create New Web Application Wizard select Claims Based Authentication.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TMgx3mycczI/AAAAAAAAAIE/htvwRZ2Jujg/s1600-h/New_Web_App2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="New_Web_App2" border="0" alt="New_Web_App2" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMgx3zOC-YI/AAAAAAAAAII/UJspTPHu-IY/New_Web_App2_thumb.jpg?imgmax=800" width="244" height="231" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Scroll down and check if the Authentication Type for this Web Application is set to Windows Authentication because this Web Application will be used by our internal clients and is not published to any external users.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TMgx4b2Da_I/AAAAAAAAAIM/sd_AuVMkW1A/s1600-h/New_Web_App3%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="New_Web_App3" border="0" alt="New_Web_App3" src="http://lh3.ggpht.com/_SudWT1XnUOo/TMgx4yLjfbI/AAAAAAAAAIQ/VOm0QrgiGTo/New_Web_App3_thumb.jpg?imgmax=800" width="244" height="231" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Change the Application Pool Account to Network-Service and click OK to create the Web Application. I did not make any ohter changes and left the defaults. After the Wizard has finished click OK and select Application Management and click on the Create Site Collections link in the Site Collections section.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TMhfq5g9oKI/AAAAAAAAAIU/aVmQuQ7rV8w/s1600-h/Site_Collection1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Site_Collection1" border="0" alt="Site_Collection1" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMhfrfzE64I/AAAAAAAAAIY/28b2Df0IV-o/Site_Collection1_thumb.jpg?imgmax=800" width="244" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Create Site Collections Dialog make sure the correct Web Application is selected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TMhfr8oBieI/AAAAAAAAAIc/cf9BNnnxXJ8/s1600-h/Site_Collection2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Site_Collection2" border="0" alt="Site_Collection2" src="http://lh5.ggpht.com/_SudWT1XnUOo/TMhfsfirsvI/AAAAAAAAAIg/8fLj2UmmzcQ/Site_Collection2_thumb.jpg?imgmax=800" width="244" height="79" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Also fill in a title, select a site template and make sure to add an Active Directory user as Primary Site Collection Administrator.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TMhftWIhEFI/AAAAAAAAAIk/BHSbZWhcR04/s1600-h/Site_Collection3%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Site_Collection3" border="0" alt="Site_Collection3" src="http://lh4.ggpht.com/_SudWT1XnUOo/TMhftwikpuI/AAAAAAAAAIo/UWx1XIjABmw/Site_Collection3_thumb.jpg?imgmax=800" width="244" height="155" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After the processing has finished you can try to access the Homepage by clickin on the displayed link. The default content shows and you are automatically logged in with your actual credentials.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TMhfu_bozFI/AAAAAAAAAIs/3qmgcPuiErw/s1600-h/Site_Collection4%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Site_Collection4" border="0" alt="Site_Collection4" src="http://lh3.ggpht.com/_SudWT1XnUOo/TMhfvMu6pYI/AAAAAAAAAIw/_nI40XPOah4/Site_Collection4_thumb.jpg?imgmax=800" width="244" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Extend the Website to external Users using ASP.Net Membership&lt;/strong&gt;&lt;/p&gt;    &lt;hr /&gt;Navigate back to Application Management –&amp;gt; Manage Web Applications. Select the Web Application created in the steps before and click on the Extend button.    &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TMiQ6iuxxAI/AAAAAAAAAI0/ByhH6Ch5_Lw/s1600-h/Extend_Web_App1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Extend_Web_App1" border="0" alt="Extend_Web_App1" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMiQ7PAptOI/AAAAAAAAAI4/B6Gbq68Fpag/Extend_Web_App1_thumb.jpg?imgmax=800" width="244" height="78" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Wizard create a new IIS Site, fill in a name and set the port number you like.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMiQ8KQJnBI/AAAAAAAAAI8/6JITD_FNJBY/s1600-h/Extend_Web_App2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Extend_Web_App2" border="0" alt="Extend_Web_App2" src="http://lh3.ggpht.com/_SudWT1XnUOo/TMiQ89jTaJI/AAAAAAAAAJA/OqEKaP_QvtY/Extend_Web_App2_thumb.jpg?imgmax=800" width="244" height="231" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Claims Authentication Types uncheck Enable Windows Authentication and check Enable Forms Based Authentication. Enter the name of the Membership and Role Providers and change the zone to Extranet at the bottom of the dialog.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TMiQ95fw7AI/AAAAAAAAAJE/zz7FgnecLrg/s1600-h/Extend_Web_App3%5B5%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Extend_Web_App3" border="0" alt="Extend_Web_App3" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMiQ-U4kZ_I/AAAAAAAAAJI/mfBweUUfOkM/Extend_Web_App3_thumb%5B1%5D.jpg?imgmax=800" width="244" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After the Web Application is extended you can test the url and you should see a Login Formular&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TMiQ_DEfdpI/AAAAAAAAAJM/Zig1xxxLrjU/s1600-h/Extend_Web_App4%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Extend_Web_App4" border="0" alt="Extend_Web_App4" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMiQ_h7rNBI/AAAAAAAAAJQ/YCYqF9I3tu0/Extend_Web_App4_thumb.jpg?imgmax=800" width="244" height="115" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The next step is to configure Sharepoint 2010 to use the ASP.Net Membership SQL Instance for authentication. Because this is beyond the scope here you can use this very detailed &lt;a href="http://donalconlon.wordpress.com/2010/02/23/configuring-forms-base-authentication-for-sharepoint-2010-using-iis7/"&gt;Step-By-Step Guide in Donal Conlons Blog&lt;/a&gt;.    &lt;br /&gt;After setting up Sharepoint 2010 and IIS to use the same ASP.Net Membership provider like UAG we configured both products to use the same authentication repository and you can login to both products with the same usernames and passwords stored in the SQL Database.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Publish the external Sharepoint Website via the UAG Protal&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;hr /&gt;&lt;/p&gt;  &lt;p&gt;I assume that you have already done the steps provided in my article about &lt;a href="http://microsoft-iag.blogspot.com/2010/10/uag-how-to-authenticate-users-against.html"&gt;UAG and SQL Authentication&lt;/a&gt;. So there is a portal up and running and we need to publish a new Web Application through the UAG Management Console.In the UAG Management Console click the Add button to start the Add Application Wizard and click Next on the Welcome Screen.&lt;/p&gt;       &lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TMiZuU8CmxI/AAAAAAAAAJU/FIBKcYhXU3M/s1600-h/UAG_Add_App1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App1" border="0" alt="UAG_Add_App1" src="http://lh4.ggpht.com/_SudWT1XnUOo/TMiZvMZj7rI/AAAAAAAAAJY/gWNn-725gjs/UAG_Add_App1_thumb.jpg?imgmax=800" width="244" height="152" /&gt;&lt;/a&gt;  &lt;p&gt;On the Select Application Screen check the option Web and choose Other Web Application (Portal Hostname).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMiZvmsjdoI/AAAAAAAAAJc/09a2yK2nhyc/s1600-h/UAG_Add_App2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App2" border="0" alt="UAG_Add_App2" src="http://lh4.ggpht.com/_SudWT1XnUOo/TMiZwekOYUI/AAAAAAAAAJg/Q4mzEKiiIeI/UAG_Add_App2_thumb.jpg?imgmax=800" width="197" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Configure Application Screen type in a name for your application and type in an Application type. Keep the application type in mind because you will need this information later.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TMiZxV7VRBI/AAAAAAAAAJk/MNdBuL58M7M/s1600-h/UAG_Add_App3%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App3" border="0" alt="UAG_Add_App3" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMiZx0pyorI/AAAAAAAAAJo/JATuHnSmv7M/UAG_Add_App3_thumb.jpg?imgmax=800" width="197" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Select Enpoint Policy Screen select the Enpoint Policies you require. To keep things simple i use the option always for all policy settings. This is not my recommendation but i want to focus on the main solution.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMiZy-ySFYI/AAAAAAAAAJs/DdZmcJMnx4E/s1600-h/UAG_Add_App4%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App4" border="0" alt="UAG_Add_App4" src="http://lh5.ggpht.com/_SudWT1XnUOo/TMiZzWATJYI/AAAAAAAAAJw/GBSuqVH7RkQ/UAG_Add_App4_thumb.jpg?imgmax=800" width="197" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Deploying an Application Screen select Configure an Application Server and click next.&lt;/p&gt;  &lt;p&gt;In the Web Servers Screen enter the name of your Sharepoint Server, set the Path value to / and enter the Port number your external Sharepoint Site is listening on.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMibx3BWsTI/AAAAAAAAAJ0/hvXwF9l5HIc/s1600-h/UAG_Add_App5%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App5" border="0" alt="UAG_Add_App5" src="http://lh5.ggpht.com/_SudWT1XnUOo/TMibym0-JxI/AAAAAAAAAJ4/HYFt_ZAB7Fc/UAG_Add_App5_thumb.jpg?imgmax=800" width="197" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Authentication Screen check the Use Single-Sign-On checkbox and add the SQLAuthN Repository as an Authentication Server. Select Both for the Client Authentication Method.&lt;/p&gt;        &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMie8nXziGI/AAAAAAAAAJ8/Ov45orMxjd4/s1600-h/UAG_Add_App6%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App6" border="0" alt="UAG_Add_App6" src="http://lh3.ggpht.com/_SudWT1XnUOo/TMie9Q8V0BI/AAAAAAAAAKA/Y5XK21mkMeQ/UAG_Add_App6_thumb.jpg?imgmax=800" width="196" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Poral Link Screen you can accept the defaults and in the Authorization Screen you can authorize all users to access the application. After that you can exit the Wizard by clicking Finish. Please do not forget to Activate your configuration to store the changes you have made. It will take some time until the new configurations becomes active. Now you can log on to the portal using your SQL Credentials and you can see a new accessable application listed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TMig4zMLiRI/AAAAAAAAAKE/jd4CJeW8b9g/s1600-h/UAG_Add_App7%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Add_App7" border="0" alt="UAG_Add_App7" src="http://lh6.ggpht.com/_SudWT1XnUOo/TMig5XLQ8CI/AAAAAAAAAKI/dECZCwixszw/UAG_Add_App7_thumb.jpg?imgmax=800" width="244" height="64" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you click on your new application the Sharepoint 2010 FBA login form appears. This is expected and if you enter the same credentials again you should be able to access the Sharepoint content.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;4. Configure the UAG Formular Engine to work with Sharepoint FBA&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;hr /&gt;The next step is customizing some configuration files in UAG to set up the Formular Engine. The Engine has to recognize and to identify the form. The Engine also needs information about the input fields of the form so that the users credentials can be inserted. An Autosubmit script needs to detect the submit button of the form and is fired after the credentials are inserted.&lt;/p&gt;  &lt;p&gt;Navigate to the &amp;lt;UAG Installation Folder&amp;gt;\von\Conf\WizardDefaults\FormLogin\ Folder and create a new Folder called CustomUpdate.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMimvhlfvlI/AAAAAAAAAKM/iUIQ-HbiCLw/s1600-h/UAG_FormEngine1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_FormEngine1" border="0" alt="UAG_FormEngine1" src="http://lh5.ggpht.com/_SudWT1XnUOo/TMimwOwccMI/AAAAAAAAAKQ/CYQdrakFdFo/UAG_FormEngine1_thumb.jpg?imgmax=800" width="244" height="62" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Copy the FormLoginCustom.xml File in the CustomUpdate Folder and rename it to FormLogin.xml&lt;/p&gt;  &lt;p&gt;Clear the content of the File and insert exactly the same content you can see in the next screenshot. If you have entered a different Application type when you created your portal application then enter the exact Application type you defined. Replace my Application type (SharepointFBA) with your one. Keep in mind that XML-Syntax is case sensitive.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TMipbcsRBjI/AAAAAAAAAKU/_DVsImvbceA/s1600-h/UAG_FormEngine2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_FormEngine2" border="0" alt="UAG_FormEngine2" src="http://lh5.ggpht.com/_SudWT1XnUOo/TMipb69JYyI/AAAAAAAAAKY/n7h4lmLnjRw/UAG_FormEngine2_thumb.jpg?imgmax=800" width="244" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The content identifies your Application type, the URL which presents the form, the supported browser for this form application, the formular name, method and the input types as they appear in the HTML source of the login form. The LoginFormHandler Script checks if there is only one &amp;lt;form&amp;gt;-tag in the HTML source and the SharepointFBA Script is a custom script that identifies the submit-button of the login form and autosubmits the form in JavaScript.&lt;/p&gt;  &lt;p&gt;To create a custom Autosubmit script open the file FormLoginDataDefinitions.xml in the &amp;lt;UAG Installation Folder&amp;gt;\von\Conf Folder and mark the complete &amp;lt;SCRIPT&amp;gt;…&amp;lt;/SCRIPT&amp;gt; section for the FormLoginSubmitSP14AAM script. Copy the section by pressing STRG-C and insert it after the closing &amp;lt;/SCRIPT&amp;gt;-Tag.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMizcJr12EI/AAAAAAAAAKc/DkzJUVoKPSE/s1600-h/UAG_Autosubmit1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Autosubmit1" border="0" alt="UAG_Autosubmit1" src="http://lh4.ggpht.com/_SudWT1XnUOo/TMizctfVBUI/AAAAAAAAAKg/3u_ZIEXr7Pc/UAG_Autosubmit1_thumb.jpg?imgmax=800" width="244" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After you inserted the copy of the script change the name-attribute value to SharepointFBA and the GetElementByID-String to ctl00_PlaceHolderMain_signInControl_login because this is the ID of the submit-button in the SharepointFBA form.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TMizd3kSzaI/AAAAAAAAAKk/6G0Uqaf56oo/s1600-h/UAG_Autosubmit2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="UAG_Autosubmit2" border="0" alt="UAG_Autosubmit2" src="http://lh4.ggpht.com/_SudWT1XnUOo/TMizeXiGnbI/AAAAAAAAAKo/ZJ3BuW2N9Is/UAG_Autosubmit2_thumb.jpg?imgmax=800" width="244" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Open the UAG Management Console and Activate the configuration. Wait some time to let the changes become active.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5. Test the Result&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;From a client computer access your portal url and log in as an external user. Click on the Sharepoint External Access link in the portal and see what happens. You can see the Sharepoint Form for a short while with username and password fields already filled out. After a second or shorter the form is automatically submitted and the user is logged in without any interaction.&lt;/p&gt;  &lt;p&gt;Have fun with this nice feature in the UAG product!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-5164065877263344699?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/5164065877263344699/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=5164065877263344699' title='5 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5164065877263344699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5164065877263344699'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2010/10/uagenable-sso-by-passing-user.html' title='UAG–Enable SSO by passing user credentials to formular based Web Applications'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_SudWT1XnUOo/TMgx3OW-FHI/AAAAAAAAAIA/vVHRGv6cYWM/s72-c/New_Web_App1_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-2577130502015796568</id><published>2010-10-14T12:10:00.001-07:00</published><updated>2010-10-19T15:14:27.279-07:00</updated><title type='text'>UAG – How to Authenticate users against SQL Server</title><content type='html'>&lt;p&gt;There are certain scenarios where the default authentication providers offered by Forefront UAG do not meet the requirements you have to authenticate your users. One example is the use of SQL Server Authentication which is not implemented in the UAG product by default. One of the most powerful features of UAG and/or IAG is the possibility to extend the authentication mechanisms by defining custom authentication repositories. In this scenario i would like to guide you through the process of how to implement an extranet scenario where you can authenticate extranet users against your Sharepoint 2010 installation using SQL Server as&amp;#160; a custom authentication provider&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Mission:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Setting up SQL-Express 2008 SP2    &lt;br /&gt;2. Configure the SQL-Express Instance     &lt;br /&gt;3. Add a custom authentication provider in UAG configuration     &lt;br /&gt;4. Add a custom repository.inc     &lt;br /&gt;5. Build a custom authentication function     &lt;br /&gt;6. Test the authentication against SQL&lt;/p&gt;  &lt;p&gt;So, here we go.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Setting up SQL-Express 2008 SP2      &lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;hr /&gt;    &lt;p&gt;In my environment i installed UAG in a existing Active Directory Domain. I also installed Sharepoint 2010 on a Windows 2008 R2 Enterprise Server and use SQL-Express as the database for Sharepoint. On this server i installed a second instance of SQL-Express 2008 SP2 for authentication. I will use this instance for claim-based FBA authentication in Sharepoint and i also like to use it as a custom repository in UAG. This is the first step to achieve SSO-Experience for external users.&lt;/p&gt;  &lt;p&gt;After the installation of SQL-Express 2008 R2 we need to setup the ASP.Net Membership Database. An easy way to get the database up and running is to use the aspnet_regsql.exe tool. Open a command prompt and navigate to the following directory:    &lt;br /&gt;%windir%\Microsoft.NET\Framework64\v2.0.xxxx and start the aspnet_regsql.exe from there.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TLv8OJdEDdI/AAAAAAAAAGk/ELc9tj8DxFM/s1600-h/aspnet_regsql_cmd%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="aspnet_regsql_cmd" border="0" alt="aspnet_regsql_cmd" src="http://lh4.ggpht.com/_SudWT1XnUOo/TLv8OdT7EaI/AAAAAAAAAGo/9rm6yX0IVvc/aspnet_regsql_cmd_thumb.jpg?imgmax=800" width="244" height="98" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Welcome to ASP.Net SQL Server Setup Wizard starts. Click next on the welcome screen. On the next screen select the Configure SQL Server for application services option and click next.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLv8O-6y2uI/AAAAAAAAAGs/mrBY0iaOCDM/s1600-h/aspnet_wizard1%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="aspnet_wizard1" border="0" alt="aspnet_wizard1" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLv8PQ6kyBI/AAAAAAAAAGw/tMGUVzpcu9g/aspnet_wizard1_thumb.jpg?imgmax=800" width="244" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Select the server and database page enter your server\instance and the name of the database. If you do not enter a database name the default will be aspnetdb.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLv8P-82TuI/AAAAAAAAAG0/Kkta9LdPQsk/s1600-h/aspnet_wizard2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="aspnet_wizard2" border="0" alt="aspnet_wizard2" src="http://lh3.ggpht.com/_SudWT1XnUOo/TLv8QCtP_sI/AAAAAAAAAG4/JivwBLcET5c/aspnet_wizard2_thumb.jpg?imgmax=800" width="244" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can accept the authetication default values at this time because we will change the SQL-Server authentication mode to mixed mode later on. In the Confirm yout setting Dialog click next and the wizard will setup the database.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Configure the SQL-Express Instance &lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;    &lt;hr /&gt;&lt;/p&gt;    &lt;p&gt;Run the SQL Server Configuration Manager tool from the SQL Server 2008 Program Group in your start menu. Enable the Shared Memory, Named Pipes and TCP/IP Protocols for your authentication instance and restart the SQL-Service.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TLwAptAdKkI/AAAAAAAAAG8/7Sn1w5eKHXg/s1600-h/sql_enable_protocols%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sql_enable_protocols" border="0" alt="sql_enable_protocols" src="http://lh3.ggpht.com/_SudWT1XnUOo/TLwApwGLxbI/AAAAAAAAAHA/eyv3SJaJxFM/sql_enable_protocols_thumb.jpg?imgmax=800" width="244" height="93" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Open the SQL-Server Managment Studio an make sure that the server is configured to allow remote connections. Rightclick on the instance node in the left pane and select properties. Select connections in the left pane and click the checkbox Allow remote connections to this server if it is not already selected.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_SudWT1XnUOo/TLwCq-nItkI/AAAAAAAAAHE/SW9eLqZHAvo/s1600-h/sql_allow_connections%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sql_allow_connections" border="0" alt="sql_allow_connections" src="http://lh6.ggpht.com/_SudWT1XnUOo/TLwCrQwUu0I/AAAAAAAAAHI/aUczAbBH5EA/sql_allow_connections_thumb.jpg?imgmax=800" width="244" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Th next step is to create a SQL-Login and make this login a dbo for the aspnetdb database. In the left pane of the Management Studio expand the Security node and rightclick Logins. Select New Login…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TLwIsj5b2nI/AAAAAAAAAHM/6gJiluKMsfo/s1600-h/sql_newlogin_1%5B5%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sql_newlogin_1" border="0" alt="sql_newlogin_1" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLwItAfsrQI/AAAAAAAAAHQ/28YVgrHXw1w/sql_newlogin_1_thumb%5B1%5D.jpg?imgmax=800" width="244" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the General Page enter a Login name select the SQL Server authentication and enter a password. Clear the Enforce password policy checkbox and select aspnetdb as the default database.&lt;/p&gt;  &lt;p&gt;Select the User Mapping page and click the aspnetdb checkbox. In the Database role membership for aspnetdb section select db_owner.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TLwIt_OXX0I/AAAAAAAAAHU/FsZ4_rFHbtg/s1600-h/sql_newlogin_2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="sql_newlogin_2" border="0" alt="sql_newlogin_2" src="http://lh4.ggpht.com/_SudWT1XnUOo/TLwIuUjC8KI/AAAAAAAAAHY/7w4JNLycZ9c/sql_newlogin_2_thumb.jpg?imgmax=800" width="244" height="219" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can now create roles and add users to your aspnetdb. I use a tool called MembershipSeeder which you can download &lt;a href="http://cks.codeplex.com/releases/view/7450"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Add a custom authentication provider in UAG configuration      &lt;br /&gt;&lt;/strong&gt;    &lt;hr /&gt;&lt;/p&gt;    &lt;p&gt;To follow the next steps i assume that you have successfully configured an HTTPS portal trunk in UAG and you can access the portal with an external client. You should see the default login page like this, if you have configured portal authentication to use Active Directory Forest:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TLdVjFmqrvI/AAAAAAAAAF0/IRcRgK_oQYk/s1600-h/Default_Login_Screen%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Default_Login_Screen" border="0" alt="Default_Login_Screen" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLdVkEzVYbI/AAAAAAAAAF4/2IobxKaCiFg/Default_Login_Screen_thumb.jpg?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Because we want to give external users a way to authenticate without creating Active Directory Accounts for each of the external users we need to add a new instance of authentication servers to our portal configuration. This is done by clicking on the Configure… button in the Trunk Configuration section within your portal management.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLdYCUtAW4I/AAAAAAAAAF8/WmsEUzugTFw/s1600-h/Configure_Button%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Configure_Button" border="0" alt="Configure_Button" src="http://lh3.ggpht.com/_SudWT1XnUOo/TLdYCwjcq1I/AAAAAAAAAGA/RcSE4MPdjzQ/Configure_Button_thumb.jpg?imgmax=800" width="244" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Advanced Trunk Configuration Window select the Authentication tab and click Add..&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLdaxFA9XoI/AAAAAAAAAGE/8uhpwaKFEB0/s1600-h/Advanced_Trunk_Configuration_Authentication%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Advanced_Trunk_Configuration_Authentication" border="0" alt="Advanced_Trunk_Configuration_Authentication" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLday_1ywOI/AAAAAAAAAGI/4ows_PZD0kY/Advanced_Trunk_Configuration_Authentication_thumb.jpg?imgmax=800" width="244" height="211" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Authentication and Authorization Dialog click Add… again&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TLddu01_lII/AAAAAAAAAGM/heQSn6CFiH8/s1600-h/Add_AuthN_Server%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Add_AuthN_Server" border="0" alt="Add_AuthN_Server" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLddwLel7cI/AAAAAAAAAGQ/gOe6dUt3Lyo/Add_AuthN_Server_thumb.jpg?imgmax=800" width="244" height="181" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the Add Authentication Server Dialog select Other as ServerType and type a ServerName like SQLServerAuthN in the ServerName textfield.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLddwnHPP2I/AAAAAAAAAGU/XLV1wG5si2s/s1600-h/Other_Server_Type%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Other_Server_Type" border="0" alt="Other_Server_Type" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLddx49u7cI/AAAAAAAAAGY/f7bRNtF2Wmg/Other_Server_Type_thumb.jpg?imgmax=800" width="244" height="160" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click OK –&amp;gt; Select –&amp;gt; OK to close the dialogs. Activate the configuration changes and keep the ServerName you entered in mind.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4. Add a custom repository.inc&lt;/strong&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;hr /&gt;    &lt;p&gt;UAG is looking for a ServerName.inc file, in this case SQLServerAuthN.inc file, in the &amp;lt;Forefront UAG Installation Directory&amp;gt;\von\InternalSite\inc\CustomUpdate folder. I recommend that you copy the Repository.inc file from the &amp;lt;Forefront UAG Installation Directory&amp;gt;\von\InternalSite\samples to the &amp;lt;Forefront UAG Installation Directory&amp;gt;\von\InternalSite\inc\CustomUpdate and rename it to ServerName.inc in this case SQLServerAuthN.inc&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_SudWT1XnUOo/TLdfqwhcFZI/AAAAAAAAAGc/m5L4sQIoUYw/s1600-h/Custom_INC_File%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Custom_INC_File" border="0" alt="Custom_INC_File" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLdfr9IC15I/AAAAAAAAAGg/Ub1ThOaMNgg/Custom_INC_File_thumb.jpg?imgmax=800" width="244" height="94" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The dependency is that the Servername you entered in the Add Authentication Dialog needs to match the Filename in the CustomUpdate folder. You can open the file with notepad and delete the functions ContinueAuthenticateRepositoryUser and ChangeRepositoryUserPassword because we will not use it at this time. The only functions which should be left in the file are the CheckCredentials, CheckChallange and AuthenticateRepositoryUser functions. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5. Build a custom authentication function      &lt;br /&gt;&lt;/strong&gt;    &lt;hr /&gt;&lt;/p&gt;    &lt;p&gt;In this file we will write a custom function to authenticate users against SQL-Server. As an example you can use the following code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;function AuthenticateRepositoryUser(repository,user_name,password)&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 'Preparing Variables      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; dim oConn,oRecordset,sCommandText,sConnectionString       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Setting up SQL-Command       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sCommandText=&amp;quot;SELECT * FROM aspnet_Users INNER JOIN aspnet_Membership ON aspnet_Users.UserID=aspnet_Membership.UserID WHERE UserName='&amp;quot; &amp;amp; user_name &amp;amp; &amp;quot;' AND Password='&amp;quot; &amp;amp; password &amp;amp; &amp;quot;'&amp;quot;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 'Setting up SQL-Connection-String      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sConnectionString=&amp;quot;Provider=SQLOLEDB;Data Source=srvmoss02\AuthN;Initial Catalog=aspnetdb;User ID=FormAuthUser;Password=Pa$$w0rd&amp;quot;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 'Setting up SQL-Connection Object      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; set oConn=Server.CreateObject(&amp;quot;ADODB.Connection&amp;quot;)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; oConn.ConnectionString=sConnectionString&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 'Open SQL-Connection      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; oConn.Open&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 'Send the query to SQL      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; set oRecordset=oConn.Execute(sCommandText)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HEAVY_TRACE &amp;quot;Cannot connect to SQL-Server&amp;quot;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; set authenticate_user_out = GetAuthenticatedUserDetails()      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if TypeName(authenticate_user_out) &amp;lt;&amp;gt; &amp;quot;Nothing&amp;quot; then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ' User already authenticated by the Filter       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; HEAVY_TRACE &amp;quot;Skipping authenticate user again&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set AuthenticateRepositoryUser = authenticate_user_out       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; exit function       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; end if&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; set authenticate_user_out = Server.CreateObject(&amp;quot;UserMgrComLayer.AuthenticateUserOut&amp;quot;)&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 'Check if the recordset contains rows      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if not oRecordset.EOF then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 'User exists, password is ok       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if oRecordset(&amp;quot;Password&amp;quot;)=password then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.Success = AUTHENTICATE_SUCCESS       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.ErrorCode = 0       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.Handle = 0       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.Message = &amp;quot;&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.FullUserName = user_name       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set AuthenticateRepositoryUser = authenticate_user_out       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end if       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Recordset contains no rows       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.Success = AUTHENTICATE_FAIL       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; authenticate_user_out.ErrorCode = ERROR_CODE_FAILED_TO_AUTHENTICATE       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; set AuthenticateRepositoryUser = authenticate_user_out       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; end if&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;end function    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Save the file in the location as mentioned above.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6. Test the authentication against SQL&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;    &lt;hr /&gt;&lt;/p&gt;    &lt;p&gt;Open a browser window on a client and enter the URL to your portal. The Login-Screen appears.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLwTDOpIZ3I/AAAAAAAAAHc/Y49LEYmn3N4/s1600-h/LoginScreen%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="LoginScreen" border="0" alt="LoginScreen" src="http://lh5.ggpht.com/_SudWT1XnUOo/TLwTDQZPTuI/AAAAAAAAAHg/yy-ZBWgw48U/LoginScreen_thumb.jpg?imgmax=800" width="244" height="147" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enter the User Name and Password of a user you created in the aspnetdb. Select the SQLServerAuthN in the authetication dropdown list and click Login.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLwTEBMQGtI/AAAAAAAAAHk/NmbNzezDCF0/s1600-h/LoginScreen2%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="LoginScreen2" border="0" alt="LoginScreen2" src="http://lh4.ggpht.com/_SudWT1XnUOo/TLwTESby_CI/AAAAAAAAAHo/29ULveiWNRc/LoginScreen2_thumb.jpg?imgmax=800" width="244" height="147" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now you can access your portal authenticated with SQL-Express.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_SudWT1XnUOo/TLwTzUEsGcI/AAAAAAAAAHs/QRl0xVi4mVs/s1600-h/access_portal%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="access_portal" border="0" alt="access_portal" src="http://lh6.ggpht.com/_SudWT1XnUOo/TLwTz5a28kI/AAAAAAAAAHw/nOzUFzAfIV8/access_portal_thumb.jpg?imgmax=800" width="244" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Let´s double check the success by viewing the session details in UAG Web Monitor.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_SudWT1XnUOo/TLwUf9fp7nI/AAAAAAAAAH0/B08BVxP0KDQ/s1600-h/web_monitor%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="web_monitor" border="0" alt="web_monitor" src="http://lh6.ggpht.com/_SudWT1XnUOo/TLwUgFN1cCI/AAAAAAAAAH4/CMiFSKnBcR0/web_monitor_thumb.jpg?imgmax=800" width="244" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Well done! Everything is fine now.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-2577130502015796568?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/2577130502015796568/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=2577130502015796568' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/2577130502015796568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/2577130502015796568'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2010/10/uag-how-to-authenticate-users-against.html' title='UAG – How to Authenticate users against SQL Server'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_SudWT1XnUOo/TLv8OdT7EaI/AAAAAAAAAGo/9rm6yX0IVvc/s72-c/aspnet_regsql_cmd_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-5402179631875882293</id><published>2010-10-05T11:26:00.001-07:00</published><updated>2010-10-05T11:45:14.828-07:00</updated><title type='text'>Reimage Celestix TMG/UAG Appliance</title><content type='html'>&lt;p&gt;When working with Celestix Forefront MSA/WSA Appliances you may have to reinstall the Appliance with the default TMG/UAG-Image at some point. It is really easy to reset the Appliance after having followed the various steps as described in the userguide. The image is then reinstalled on the hardware and several actions&amp;#160; will take place to finish the appliance setup thereafter. Some basic initialization tasks take place after the image is copied to the hardware which actually is the core set up of the machine. Some auto-admin-logon tasks start and several vbscripts run during the post installation phase. At this point you might experience a problem that the vbscript does not stop running. The script hangs and nothing more happens. The Appliance fails to reinitialize and all the features, including the typical first-start wizards of TMG/UAG will fail. If you compare the intructions in the Celestix userguide you won´t see any mistakes you may have made. The solution to the problem is that the network interfaces eth0 and eth1 need to have a physical link to run the initialization scripts. There is no documentation about this prerequisit. Hence, you simply need to crossover these two ports or link them to a switch and the reset process will run properly. Celestix has been informed about this documentation issue and I hope they will add this missing information as soon as possible to their Appliance userguide.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-5402179631875882293?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/5402179631875882293/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=5402179631875882293' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5402179631875882293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5402179631875882293'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2010/10/reimage-celestix-tmguag-appliance.html' title='Reimage Celestix TMG/UAG Appliance'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-5292582238357187669</id><published>2010-09-30T04:40:00.001-07:00</published><updated>2010-09-30T04:40:36.049-07:00</updated><title type='text'>Microsoft Forefront UAG Administrators Handbook</title><content type='html'>&lt;p&gt;A new book is available for peope interested in configuring and administering the Microsoft Forefront UAG 2010. The book is written for Networking and Security Engineers who are intended to integrate UAG in the corporate network. For more information and details click &lt;a href="https://www.packtpub.com/microsoft-forefront-uag-2010-administrators-handbook/book"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-5292582238357187669?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/5292582238357187669/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=5292582238357187669' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5292582238357187669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/5292582238357187669'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2010/09/microsoft-forefront-uag-administrators.html' title='Microsoft Forefront UAG Administrators Handbook'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-1109424923778337943</id><published>2010-09-30T04:26:00.001-07:00</published><updated>2010-09-30T04:27:24.028-07:00</updated><title type='text'>Microsoft Forefront UAG in Common Criteria Evaluation</title><content type='html'>&lt;p&gt;Microsoft Forefront UAG has formally entered evaluation for Common Criteria Evaluation Assurance Level 2+ with TÜViT as the testing laboratory and is listed in the Evaluated Product List on the BSI website. For more information you can read this &lt;a href="http://blogs.technet.com/b/edgeaccessblog/archive/2010/01/14/forefront-uag-in-common-criteria-evaluation.aspx"&gt;blog&lt;/a&gt; and you can find the Evaluated Product List &lt;a href="https://www.bsi.bund.de/cln_165/ContentBSI/Themen/ZertifizierungundAnerkennung/ZertifierungnachCCundITSEC/AktuellzuProduktzertifizierung/aktuellzertifikat.html#laufendeprodukte"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-1109424923778337943?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/1109424923778337943/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=1109424923778337943' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/1109424923778337943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/1109424923778337943'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2010/09/microsoft-forefront-uag-in-common.html' title='Microsoft Forefront UAG in Common Criteria Evaluation'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-7864525607129264376</id><published>2008-10-25T05:52:00.001-07:00</published><updated>2008-10-25T09:21:02.088-07:00</updated><title type='text'>How to configure IAG to use ADAM as a custom Repository</title><content type='html'>Here are the steps for configuring Intelligent Application Gateway (IAG) to use an Active Directory Application Mode (ADAM) instance for user authentication. An how-to on configuring ADAM can be found &lt;a href="http://microsoft-iag.blogspot.com/2008/10/how-to-set-up-active-directory.html"&gt;here&lt;/a&gt; in this blog.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;All authentication providers IAG uses are defined in a file named RepositoryType.xml. This file can be used as a blueprint for the additional RepositoryType.xml file we create - or you simply use my file as a reference to build your custom repository. In order to get our customizations independent of any updates made to IAG during Servicepack or Hotfix installations we create a folder named CustomUpdate under \Whale-Com\e-Gap\von\conf as you can see in the screenshot:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;img id="BLOGGER_PHOTO_ID_5261100466513541954" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 240px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQMu__Iue0I/AAAAAAAAACs/zfdknEfwRcM/s320/iag_repository_path.jpg" border="0" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Then we copy the RepositoryType.xml from the conf folder to the CustomUpdate folder. You can delete all content in the file except the repository for Active Directory or you create a blank RepositoryType.xml and copy in the content of this post. The content of the file for cut and paste can be found &lt;a href="http://www.ssl-vpn.de/wiki/How%20to%20publish%20Sharepoint%20to%20internal%20and%20external%20users%20with%20IAG.ashx?NoRedirect=1"&gt;here&lt;/a&gt;. The following screenshot shows the content in Notepad:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQM1888XlSI/AAAAAAAAAC0/SwwAA25vJXE/s1600-h/repositorytype_screen.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261108110966625570" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 205px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQM1888XlSI/AAAAAAAAAC0/SwwAA25vJXE/s320/repositorytype_screen.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;After we created the xml file in the right place we have to commit the configuration changes within the IAG Configuration Application. Make sure the checkbox "Apply changes made to external configuration settings" is checked.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQM3Hf5VPkI/AAAAAAAAAC8/mXsIEVsFoXk/s1600-h/iag_save_external_config.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261109391659449922" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 208px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQM3Hf5VPkI/AAAAAAAAAC8/mXsIEVsFoXk/s320/iag_save_external_config.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now we are ready to configure our portal to accept logins from users stored in ADAM. To allow them to log in expand HTTPS Connections and click on you portal. From there click on the Configure button near Advanced Trunk Configuration to open your portals configuration page.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_SudWT1XnUOo/SQM4WHVNZsI/AAAAAAAAADE/n7FO3TlLqNM/s1600-h/iag_advanced_trunk.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261110742275155650" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 244px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQM4WHVNZsI/AAAAAAAAADE/n7FO3TlLqNM/s320/iag_advanced_trunk.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;On the Advanced Trunk Configuration Page click the Authentication Tab and click the Add button. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_SudWT1XnUOo/SQNEPVxUpnI/AAAAAAAAAEM/S8AIuW3K6tw/s1600-h/iag_advanced_trunk_authentication.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261123820031616626" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 238px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQNEPVxUpnI/AAAAAAAAAEM/S8AIuW3K6tw/s320/iag_advanced_trunk_authentication.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In the Authentication and User/Group Server click Add&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQM6CDVeYeI/AAAAAAAAADc/lWpd6MhMVgM/s1600-h/iag_add_authentication_server.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261112596628398562" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 239px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQM6CDVeYeI/AAAAAAAAADc/lWpd6MhMVgM/s320/iag_add_authentication_server.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In the Add Server Dialog enter the values for your ADAM Instance and the username and password for the user you configured for read access within you adam instance. If you do not want to login with the full dustinguishedName of the user you can fill out the userPrincipalName Attribute of the account. Then the users UPN can be used on the Add Server Dialog and for portal login.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_SudWT1XnUOo/SQM76X8ogwI/AAAAAAAAADk/diwhCv2sZ48/s1600-h/iag_add_repository_server.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261114663745651458" style="WIDTH: 186px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQM76X8ogwI/AAAAAAAAADk/diwhCv2sZ48/s320/iag_add_repository_server.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Assuming you have configured your ADAM Instance correctly the Add Server Dialog will close and a new selectable authentication provider is in the list of possible sources on the Authentication and User/Group Server Dialog. Click the Select button and we are nearly at the end of the story.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_SudWT1XnUOo/SQM9w2s0-LI/AAAAAAAAAD0/yTQeg09lllE/s1600-h/iag_new_selectable_repository.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261116699225422002" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 238px" alt="" src="http://1.bp.blogspot.com/_SudWT1XnUOo/SQM9w2s0-LI/AAAAAAAAAD0/yTQeg09lllE/s320/iag_new_selectable_repository.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now we can create a new application in our portal. In my case i generated a new generic web application pointing to a Sharepoint Site configured to be an extended Site of an existing Intranet Site but located in the Extranet Zone and configured to use forms-based authentication against my Contos Demo ADAM Repository. In ADAM i created a group called Sharepoint. Thus we can security-trim the published Sharepoint Application only to be accessible for members of the Sharepoint Group. To do this, complete the add application wizard and enter the required information there. After completing the wizard edit the created application and select the Authorization Tab of the applications porperty window. Clear the All users are authorized checkbox.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQNAWDh2dQI/AAAAAAAAAD8/_wmDN1cG4ug/s1600-h/iag_authorize_adam_users.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261119537347458306" style="WIDTH: 225px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQNAWDh2dQI/AAAAAAAAAD8/_wmDN1cG4ug/s320/iag_authorize_adam_users.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Click the Add button and select the newly created ADAM Repository in the Select Users or Groups Window. Search for the group you created in your ADAM Instance and add the group by clicking the Add button&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_SudWT1XnUOo/SQNB4_EN0QI/AAAAAAAAAEE/ERirYRwmguY/s1600-h/iag_select_users_or_groups.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261121236956467458" style="WIDTH: 256px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://2.bp.blogspot.com/_SudWT1XnUOo/SQNB4_EN0QI/AAAAAAAAAEE/ERirYRwmguY/s320/iag_select_users_or_groups.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Click OK twice and activate your configuration. When the configuration activation has finished, you are able to logon to the portal with an account stored in ADAM and you will see the published application if you are a member of the Sharepoint group.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-7864525607129264376?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/7864525607129264376/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=7864525607129264376' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/7864525607129264376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/7864525607129264376'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2008/10/how-to-configure-iag-to-use-adam-as.html' title='How to configure IAG to use ADAM as a custom Repository'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_SudWT1XnUOo/SQMu__Iue0I/AAAAAAAAACs/zfdknEfwRcM/s72-c/iag_repository_path.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1228406991075550547.post-1096531984889456004</id><published>2008-10-24T08:57:00.000-07:00</published><updated>2008-10-25T10:51:33.459-07:00</updated><title type='text'>How to set up Active Directory Application Mode (ADAM) for use with IAG</title><content type='html'>&lt;span style="font-family:arial;"&gt;Here are the steps to set up and configure your ADAM Instance to get it working with Microsoft IAG:&lt;br /&gt;First you have to set up the components using Add/Remove Programs - Add/Remove Windows Components - Active Directory Services - Active Directory Application Mode (ADAM) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_SudWT1XnUOo/SQHzHrV17fI/AAAAAAAAAAU/Tid66DT75RY/s1600-h/adam_inst_2003.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260753152964423154" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 249px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQHzHrV17fI/AAAAAAAAAAU/Tid66DT75RY/s320/adam_inst_2003.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After the setup has finished you will find a new program group named ADAM under All Programs:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_SudWT1XnUOo/SQHz32FKOAI/AAAAAAAAAAc/6qm2opAuKsE/s1600-h/adam_new_programgroup.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260753980480960514" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 293px" alt="" src="http://1.bp.blogspot.com/_SudWT1XnUOo/SQHz32FKOAI/AAAAAAAAAAc/6qm2opAuKsE/s320/adam_new_programgroup.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Now you can start creating your instance using the wizard Create ADAM Instance. After the Welcome Screen select Create a Unique Instance:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQH1R0i9UFI/AAAAAAAAAAk/fSdMpPvr8Ug/s1600-h/ADAM_unique_instance.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260755526257299538" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 252px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQH1R0i9UFI/AAAAAAAAAAk/fSdMpPvr8Ug/s320/ADAM_unique_instance.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the instance name choose any name you like - you can identify your instance after finishing the wizard in services.msc&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_SudWT1XnUOo/SQH2qqnwjgI/AAAAAAAAAAs/WIHgF66XZ7c/s1600-h/instance_name.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260757052601437698" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 249px" alt="" src="http://2.bp.blogspot.com/_SudWT1XnUOo/SQH2qqnwjgI/AAAAAAAAAAs/WIHgF66XZ7c/s320/instance_name.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Define the ports for unencrypted and encrypted LDAP connections. To use encrypted LDAP connections or LDAPS you have to issue a server authentication certificate for the service running your instance&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_SudWT1XnUOo/SQH3z7v4c8I/AAAAAAAAAA0/uw7ug8WKu_k/s1600-h/instance_ports.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260758311329362882" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 246px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQH3z7v4c8I/AAAAAAAAAA0/uw7ug8WKu_k/s320/instance_ports.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;On the next screen you configure the entry point of your LDAP Directory to store individual data. I recommend you to use an entry point like dc=&lt;name&gt;,dc=&lt;name&gt;, for example dc=contoso,dc=local to be able to create OU´s underneath your directory structure&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQH5dXer1PI/AAAAAAAAAA8/lA-S5KZfKI4/s1600-h/instance_entry.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260760122659689714" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 246px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQH5dXer1PI/AAAAAAAAAA8/lA-S5KZfKI4/s320/instance_entry.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select a location where you like to store your instance data&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQH7fyZtpJI/AAAAAAAAABE/vFRln8fAAYA/s1600-h/instance_location.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260762363269588114" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 249px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQH7fyZtpJI/AAAAAAAAABE/vFRln8fAAYA/s320/instance_location.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Choose a service account under which your instance will run. I prefer to use the network service to achieve a minimum of required permissions&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_SudWT1XnUOo/SQH7_ELudzI/AAAAAAAAABM/SpyX5LS7BKw/s1600-h/instance_service.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260762900618704690" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 247px" alt="" src="http://2.bp.blogspot.com/_SudWT1XnUOo/SQH7_ELudzI/AAAAAAAAABM/SpyX5LS7BKw/s320/instance_service.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you have to select the the ldif-files for schema import. The three ones selected in the screenshot are enough in this scenario&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_SudWT1XnUOo/SQH8dCtzKWI/AAAAAAAAABU/JMauBJymlCw/s1600-h/instance_schema.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5260763415620823394" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 249px" alt="" src="http://3.bp.blogspot.com/_SudWT1XnUOo/SQH8dCtzKWI/AAAAAAAAABU/JMauBJymlCw/s320/instance_schema.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After clicking next two or three times more the creation of your directory will start, the schema files are imported and the service is started. Now you are ready to use your instance.&lt;br /&gt;&lt;br /&gt;When the installation is finished you can find the ADSI-ADAM-Editor Tool within the ADAM Program Group created during the installation. You are using this tool to create users, groups, ou´s and to fill out the properties you need. The first thing that needs to be done is to establish a connection to your fresh installed LDAP Directory. Therefore you create your connection like the screenshot shows by right clicking the top node and select connection:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_SudWT1XnUOo/SQLX9CWdmAI/AAAAAAAAABc/iRtPtk_-MMQ/s1600-h/adsi_connect.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261004758325237762" style="WIDTH: 306px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://2.bp.blogspot.com/_SudWT1XnUOo/SQLX9CWdmAI/AAAAAAAAABc/iRtPtk_-MMQ/s320/adsi_connect.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;When you are connected you are able to create an ou by right clicking your LDAP structure and selecting New --&gt; Object and click organizationalUnit. In the following dialog enter the name of your ou and click finish. This procedure may look something like this:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQLZvwrM_6I/AAAAAAAAABk/D5xVwMrGIgU/s1600-h/adsi_ou.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261006729265348514" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 269px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQLZvwrM_6I/AAAAAAAAABk/D5xVwMrGIgU/s320/adsi_ou.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In the same way you can create user accounts in your ou. Right click the ou and select New --&gt; Object --&gt; user. Fill in the name for example Demo User, click next and finish. The user object is created but disabled. The account policies for the server you are running ADAM on need to be achieved. After you set a password in compliance with your password policies you can enable the user account. To set the password you just need to right click the user object and select Reset Password. To enable the user right click the user object and select properties and search for the attribute named msDS-UserAccountDisabled. Doubleclick the property and set the value to false.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQLd5nDRchI/AAAAAAAAABs/WDms7wdjYaM/s1600-h/adsi_useraccountdisabled.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261011296527151634" style="WIDTH: 287px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQLd5nDRchI/AAAAAAAAABs/WDms7wdjYaM/s320/adsi_useraccountdisabled.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_SudWT1XnUOo/SQLfiYPzh5I/AAAAAAAAAB0/9wzaSfwmNzc/s1600-h/adsi_enableuseraccount.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261013096439449490" style="WIDTH: 287px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://1.bp.blogspot.com/_SudWT1XnUOo/SQLfiYPzh5I/AAAAAAAAAB0/9wzaSfwmNzc/s320/adsi_enableuseraccount.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The next step is to enable read access on the directory for your created user. In ADSI-ADAM you can see a node called CN=Roles. You can find three predefined groups named Administrators, Readers and Users. To give read access to our created user we need to right click the group named readers and select the property member. Click edit to open the membership window for that group. Enter the full distinguishedName of the user object you like to put in.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_SudWT1XnUOo/SQLhnsQq9uI/AAAAAAAAAB8/aEpmmfNsWbM/s1600-h/adsi_readermember.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261015386734393058" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 302px" alt="" src="http://1.bp.blogspot.com/_SudWT1XnUOo/SQLhnsQq9uI/AAAAAAAAAB8/aEpmmfNsWbM/s320/adsi_readermember.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ADAM by default is configured to only allow secure connections. For interaction with IAG authentication we connect to the ADAM instance using the simple bind method. You should think about securing this communication, that means encrypting using IPSec. To test that simple bind will NOT work out-of-the-box you can use ldp.exe which can be startet through the ADAM Command Prompt in the ADAM Program Group. As you can see unencrypted authentication is disabled by default.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_SudWT1XnUOo/SQMEkJfD_CI/AAAAAAAAACE/F0iCbWCWLRk/s1600-h/ldp_simpleauthdisabled.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261053808766876706" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 222px" alt="" src="http://1.bp.blogspot.com/_SudWT1XnUOo/SQMEkJfD_CI/AAAAAAAAACE/F0iCbWCWLRk/s320/ldp_simpleauthdisabled.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mind the message about simple bind in the lower end of the ldp tool. To enable simple bind you have to use the ADAM Command Console using the dsmgmt command. Very simmilar to ntdsutil you configure the ds behavior to allow password operations on unsecure connections. The following screen shows you the exact commands in dsmgmt.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_SudWT1XnUOo/SQMHg1K7ViI/AAAAAAAAACM/bS3m1dR_wl4/s1600-h/dsmgmt_enable_unsec_authn.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261057050308990498" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 158px" alt="" src="http://4.bp.blogspot.com/_SudWT1XnUOo/SQMHg1K7ViI/AAAAAAAAACM/bS3m1dR_wl4/s320/dsmgmt_enable_unsec_authn.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After configuring the ADAM instance you are able to bind to the directory using simple bind.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_SudWT1XnUOo/SQMIY_h9WaI/AAAAAAAAACU/MRAvuAGoz3U/s1600-h/ldp_simpleauthenabled.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5261058015162620322" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 223px" alt="" src="http://2.bp.blogspot.com/_SudWT1XnUOo/SQMIY_h9WaI/AAAAAAAAACU/MRAvuAGoz3U/s320/ldp_simpleauthenabled.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Everything is done so far. You can additionally create a group, for example Sharepoint in the same way you created a user or an ou. In the value for the group-type enter &lt;span style="font-family:arial;"&gt;2147483650. Adding users to the group can be done in the same way you added the demo user to the Readers group for ADAM instance reader access. Select the member attribute of the group an add the user using the distinguishedName of the user object. We can continue with our work in IAG now. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1228406991075550547-1096531984889456004?l=microsoft-iag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://microsoft-iag.blogspot.com/feeds/1096531984889456004/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1228406991075550547&amp;postID=1096531984889456004' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/1096531984889456004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1228406991075550547/posts/default/1096531984889456004'/><link rel='alternate' type='text/html' href='http://microsoft-iag.blogspot.com/2008/10/how-to-set-up-active-directory.html' title='How to set up Active Directory Application Mode (ADAM) for use with IAG'/><author><name>Andreas Hecker</name><uri>http://www.blogger.com/profile/00204032976772109649</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://4.bp.blogspot.com/_SudWT1XnUOo/TKOWaRUdxpI/AAAAAAAAAEs/G7Yqnhp3Gjg/S220/106_9878sw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_SudWT1XnUOo/SQHzHrV17fI/AAAAAAAAAAU/Tid66DT75RY/s72-c/adam_inst_2003.jpg' height='72' width='72'/><thr:total>2</thr:total></entry></feed>
