How to change the customer / partner portal V2
to authenticate against the MSCRM only.
There is a new portal and the changes are Little bit different
than it was in the previous version
Customer portal V1 changes can be found here
Walkthrough:
In order to do it you'll need to
download the portal and follow the installation steps, avoid all the stuff
regarding the LiveID.
After you've imported the solution
and the website data we are ready to go.
1) Open the website in visual studio.
2) Edit he web.config.
a. Remove
a.1)
<add
name="Live" connectionString="Application Id=0000000000000000; Secret=00000000000000000000000000000000"/>
a.2)
<add
key="FederationMetadataLocation"
value="https://contoso.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml"/>
a.3)
<membership
defaultProvider="CrmMembershipProvider">
<providers>
<add
name="CrmMembershipProvider"
type="Microsoft.Xrm.Portal.Web.Security.LiveIdMembershipProvider,
Microsoft.Xrm.Portal" liveIdConnectionStringName="Live"/>
</providers>
</membership>
a.4)
<httpRuntime
maxRequestLength="102400" requestValidationMode="2.0"
requestValidationType="Microsoft.Xrm.Portal.IdentityModel.Web.FederationRequestValidator,
Microsoft.Xrm.Portal"/>
a.5)
<add
name="LiveId" verb="*" path="LiveID.axd"
preCondition="integratedMode"
type="Microsoft.Xrm.Portal.IdentityModel.Web.Handlers.LiveIdAccountTransferHandler,
Microsoft.Xrm.Portal"/>
<add
name="Federation" verb="*" path="Federation.axd"
preCondition="integratedMode"
type="Microsoft.Xrm.Portal.IdentityModel.Web.Handlers.FederationAuthenticationHandler,
Microsoft.Xrm.Portal"/>
a.6)
<microsoft.identityModel>
<service>
<audienceUris>
<add
value="http://contoso.cloudapp.net/"/>
</audienceUris>
<federatedAuthentication>
<wsFederation
passiveRedirectEnabled="false"
issuer="https://contoso.accesscontrol.windows.net/v2/wsfederation"
realm="http://contoso.cloudapp.net/"
requireHttps="false"/>
<cookieHandler
requireSsl="false"/>
</federatedAuthentication>
<issuerNameRegistry
type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry,
Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35">
<trustedIssuers>
<add
thumbprint="0000000000000000000000000000000000000000"
name="https://contoso.accesscontrol.windows.net/"/>
</trustedIssuers>
</issuerNameRegistry>
</service>
</microsoft.identityModel>
<microsoft.xrm.portal.identityModel>
<registration
enabled="true" registrationPath="~/confirm-invite"
profilePath="~/profile" accountTransferPath="~/login"
requiresInvitation="true"
requiresChallengeAnswer="false"
requiresConfirmation="false"
invitationCodeDuration="01:00:00"/>
</microsoft.xrm.portal.identityModel>
b. Replace the
Authentication tag to as follow
<authentication
mode="Forms">
<forms loginUrl="/login"
timeout="525600"
defaultUrl="/" />
</authentication>
3) Edit \Pages\Login.aspx
a. Remove
a.1)
<%@
Register TagPrefix="adx" TagName="AzureAcs"
Src="~/Controls/AzureAcs.ascx" %>
a.2)
<adx:AzureAcs
runat="server" />
a.3)
<crm:Snippet
runat="server" SnippetName="Login/ACS/AccountTransfer/Heading"
DefaultText="Live ID Account Transfer" />
a.4)
<p>Already
registered with a Windows Live ID account? Sign in to transfer the account to
an AppFabric ACS account:</p>
b. Replace
<crm:LiveIdLoginStatus
ID="TransferLiveIdLink" runat="server" LoginImageUrl="https://www.passportimages.com/1033/signin.gif"
LogoutImageUrl="https://www.passportimages.com/1033/signout.gif"
/>
With
<asp:Login ID="Login1"
runat="server" OnAuthenticate="Login1_Authenticate"></asp:Login>
5) Edit
\Pages\Login.aspx.cs
a.
Add to
using
using System.Collections.Generic;
using System.Linq;
using
System.Web;
using
Microsoft.Crm.Sdk;
using
Microsoft.Xrm.Client.Services;
using
Microsoft.Xrm.Client;
using
Xrm;
using
System.Web.Security;
b.
Replace
Page_Load
protected
void Page_Load(object sender, EventArgs e)
{
if ((User != null) &&
User.Identity.IsAuthenticated)
{
var redirectUrl =
!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) ?
Request["ReturnUrl"]:
!string.IsNullOrEmpty(Request.QueryString["URL"])? Request["URL"]:
"/";
Response.Redirect(redirectUrl);
}
}
c.
Add
private Contact _loginContact;
protected Contact LoginContact
{
get
{
return _loginContact ??
(_loginContact = XrmContext.ContactSet.FirstOrDefault(c => c.Adx_username ==
Login1.UserName && c.Adx_LogonEnabled != null &&
c.Adx_LogonEnabled.Value));
}
}
protected void
Login1_Authenticate(object sender, System.Web.UI.WebControls.AuthenticateEventArgs
e)
{
if (LoginContact == null)
{
e.Authenticated = false;
}
else
{
if (LoginContact.Adx_password
== Login1.Password)
{
if
(LoginContact.Adx_changepasswordatnextlogon != null &&
LoginContact.Adx_changepasswordatnextlogon.Value)
{
//var page =
ServiceContext.GetPageBySiteMarkerName(Website, "ChangePassword");
//string redirectURL =
ServiceContext.GetUrl(page) + "?UserName=" +
Server.UrlEncode(Login1.UserName) + "&Password=" +
Server.UrlEncode(Login1.Password);
//Response.Redirect(redirectURL);
}
else
{
LoginContact.Adx_LastSuccessfulLogon = DateTime.Now.Date;
XrmContext.UpdateObject(LoginContact);
XrmContext.SaveChanges();
e.Authenticated = true;
//
Response.Redirect("/");
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, true);
}
}
else
{
e.Authenticated = false;
}
}
}
Compile, Debug and Publish to the
IIS.
Download changed portal: