Premessa doverosa: per raggiungere l’obiettivo del titolo di questo post ho impiegato più di 8 ore di lavoro leggendo e rileggendo documentazione tecnica Microsoft, blog tecnici e quanto altro. Spero che il mio post sia di aiuto a molti lettori; comunque lo sarà per me nei prossimi deployment. Il documento MSDN che prenderò come riferimento è il seguente http://msdn.microsoft.com/en-us/library/gg252020.aspx (che deve essere adattata per Sharepoint Foundation). Allo stesso modo suddividerò la trattazione per passi successivi.
STEP 1: Preparazione del Database al fine di utilizzare il Membership ed il Role Provider ASP.NET per le applicazioni web
Eseguiamo il file aspnet_regsql.exe contenuto nella cartella C:\Windows\Microsoft.NET\Framework64\v2.0.50727. Verrà avviata una procedura guidata che consentirà facilmente di creare il database che verrà utilizzando dal Provider. Sarà sufficiente selezionare l’istanza del Server di Database (WIN-02F9XCJAEJX\SQLEXPRESS nel mio caso) ed assegnare il nome al database (aspnetdb_claim)
STEP 2: Aggiungere utenti e ruoli al Database del Provider dei Ruoli e dei Membri
Avviare Microsoft SQL Server Management Studio ed eseguire le seguenti query sul db aspnetdb_claim database:
declare @now datetime set @now= GETDATE() exec aspnet_Membership_CreateUser 'MyAppName','admin','pwadmin', '','admin1@contoso.com','','',1,@now,@now,0,0,null
EXEC aspnet_Roles_CreateRole 'MyAppName', 'Administrator' EXEC aspnet_UsersInRoles_AddUsersToRoles 'MyAppName', 'admin', 'Administrator', 8
STEP 3: Creare un’applicazione di Sharepoint Foundation
Seguire la seguente procedura
- Aprire SharePoint 2010 Central Administration
- In Application Management section, cliccare su Manage web applications.
- Sulla ribbon (striscia superiore della finestra) cliccare su New. Si creerà una nuova applicazione con dei valori default: assumiamo in questo esempio che la porta sia la numero 8676 e l’url pubblico sia http://WIN-02F9XCJAEJX:8676/ (WIN-02F9XCJAEJX è il nome del server dove state eseguendo il deployment)
- Nella finestra di dialogo, nella sezione Authentication, scegliere Claims Based Authentication.
- In Claims Authentication Types section, selezionare Enable Forms Based Authentication (FBA) e deselezionare tutte le altre opzioni (in particolare Enable Windows Authentication e Integrated Windows authentication)
- Nella casella di testo “ASP.NET membership provider name” immettere aspnetmembership, nel campo “ASP.NET role manager name” svrivere aspnetrolemanager
- Nella sezione “Database Name and Authentication”, cambiare il nome del db da WSS_Content a WSS_Content_8676 ed assicurarsi che il database server sia WIN-02F9XCJAEJX\Sqlexpress, dove abbiamo creato il dabase dei ruoli e membri.
- Lasciare le altre opzioni invariate
STEP 4: Configurare il Membership ed il Role Provider per l’applicazione Sharepoint Foundation
Questo step prevede la modifica di:
- Central Administration
- Security Token Service
- FBA Web Application
E’ necessario innanzitutto identificare il web.config della SharePoint 2010 Central Administration: a tal proposito è possibile ad esempio servirsi di IIS Manager ed espolare il sito “SharePoint Central Administration v4”. Nel mio caso la directory di appoggio della Central Administration si trova in C:\inetpub\wwwroot\wss\VirtualDirectories\32388.Sostituire il web.config con web.config (46,21 kb). Di fatto sarebbe stato sufficiente inserire nel web.config la segunte stringa di connessione appena dopo </configSections>
<connectionStrings> <clear /> <add name="AspNetSqlMembershipProvider" connectionString="data source=.\Sqlexpress;Integrated Security=SSPI;Initial Catalog=aspnetdb_claim" providerName="" /> <add name="MyLocalSQLServer" connectionString="Initial Catalog=aspnetdb_claim;data source=.\Sqlexpress;Integrated Security=SSPI;" /> </connectionStrings>
ed il seguente codicie
<roleManager enabled="true" cacheRolesInCookie="false" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" defaultProvider="AspNetWindowsTokenRoleProvider" createPersistentCookie="false" maxCachedResults="25"> <providers> <clear /> <add connectionStringName="AspNetSqlMembershipProvider" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add name="aspnetrolemanager" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" /> </providers> </roleManager> <membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType=""> <providers> <clear /> <add connectionStringName="AspNetSqlMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordAttemptWindow="10" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add name="aspnetmembership" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </membership>
nel <system.web>, andando a sostituire i tag <roleManager> e <membership> se già estenti.Sempre mediante IIS identificare SharePoint Web Services ed esplorare SecurityTokenServiceApplication. Nel nostro caso si verrebbe reindirizzati alal seguente cartella C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\WebServices\.Sostituire il web.config presente con web.config (6,73 kb), oppure aggiungere al web.config già presente il seguente codice appenda dopo <configuration>
<connectionStrings> <clear /> <add name="AspNetSqlMembershipProvider" connectionString="data source=.\Sqlexpress;Integrated Security=SSPI;Initial Catalog=aspnetdb_claim" providerName="" /> <add name="MyLocalSQLServer" connectionString="Initial Catalog=aspnetdb_claim;data source=.\Sqlexpress;Integrated Security=SSPI;" /> </connectionStrings>
e la sezione seguente appena prima di </configuration>:
<system.web> <roleManager enabled="true" cacheRolesInCookie="false" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" createPersistentCookie="false" maxCachedResults="25"> <providers> <add connectionStringName="AspNetSqlMembershipProvider" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add name="aspnetrolemanager" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" /> </providers> </roleManager> <membership userIsOnlineTimeWindow="15" hashAlgorithmType=""> <providers> <add connectionStringName="AspNetSqlMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" passwordAttemptWindow="10" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add name="aspnetmembership" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </membership> </system.web>
Infine è necessario sostituire il web.config della nostra applicazione web allocata in C:\inetpub\wwwroot\wss\VirtualDirectories\8676 con web.config (48,19 kb) o in alternativa modificare il file di configurazione già presente aggiungendo:
<connectionStrings> <add name="MyLocalSQLServer" connectionString="data source=.\Sqlexpress;Integrated Security=SSPI;Initial Catalog=aspnetdb_claim" providerName="" /> </connectionStrings>
subito dopo </configSections> e
<membership defaultProvider="i"> <providers> <add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <add name="aspnetmembership" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </membership> <roleManager defaultProvider="c" enabled="true" cacheRolesInCookie="false"> <providers> <add name="c" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthRoleProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> <add name="aspnetrolemanager" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MyLocalSQLServer" applicationName="MyAppName" /> </providers> </roleManager>
appena prima di </system.web>, sostituendo nel caso in cui esistano i tag già presenti.
STEP 5: Testare il modello di autentificazione
Utilizzando la Central Administration website, sotto Application Management cliccare su Create site collection.Nella casella a discesa Web Application selezionare la nostra applicazione, http://WIN-02F9XCJAEJX:8676/ e quindi assegnare un titolo al sito. Nella texbox User name scrivere admin, ovvero il nome dell’utente che abbiamo inserito nel DB e controllare l’esistenza dell’utente.Confermare la creazione del sito e nel browser digitare http://WIN-02F9XCJAEJX:8676/ . Se tutto funziona si viene reindirizzati ad una pagina di login dove si deve inserire lo user name admin e la password pwadmin.
STEP 6: Risolvere gli eventuali problemi
Il problema che io ho incontrato era legato alla non attivazione di Security Token Service Application .

La risoluzione del problema è descritta nel seguente articolo http://support.microsoft.com/kb/2520344. In particolare ho dovuto assegnare al sito il livello di Trust Full.