Impersonation, SSO & custom web parts Using Impersonation and Single Sign-On to access corporate data from within a custom SharePoint web part Mike FITZSIMON SYSTEMSARCHITECT F ITZSIMON IT C ONSULTING PTY LTD
Fitzsimon IT C ONSULTING PTY LTD Agenda A Custom Web Part overview Single Sign-On Impersonation Generating graphics on the server What can go wrong
Fitzsimon IT C ONSULTING PTY LTD
Custom Web Part Web part generates this graph (.gif) dynamically from corporate data in a database The currently-logged-in user does not have permission to access this data
Fitzsimon IT C ONSULTING PTY LTD Single Sign-On Service To many, a great disappointment Installed by default with SPS, but set to manual start-up Must run under an account which Is a local administrator Belongs to STS_WPG & SPS_WPG groups Has db_owner rights for the SharePoint Services configuration database Belongs to Server Administrators role for the SQL Server holding the SSO database
Fitzsimon IT C ONSULTING PTY LTD SSO Application Definition Unique name for the application plus definition of logon fields Username, password, domain, database name, secret Q&A, whatever SharePoint Portal Server Central Administration -> Component Configuration -> Manage settings for single sign-on -> Manage settings for enterprise application definitions
Fitzsimon IT C ONSULTING PTY LTD Impersonation Using SSO in a Web Part Imports Microsoft.SharePoint.Portal.SingleSignon RenderWebPart Protected Overrides Sub RenderWebPart(ByVal output As System.Web.UI.HtmlTextWriter) Use SingleSignOn service to change user identity to impersonate a user with sufficient rights to access the data. 'context for new identity Dim objContext As WindowsImpersonationContext Dim arrCredentials() As String Dim strUID As String Dim strDomain As String Dim strPassword As String
Fitzsimon IT C ONSULTING PTY LTD Impersonation try to get credentials from SSO service Credentials.GetCredentials(Convert.ToUInt32("0"), _ "ApplicationName", arrCredentials) strUID = arrCredentials(0) strDomain = arrCredentials(1) strPassword = arrCredentials(2) change the context Dim objIdentity As WindowsIdentity objIdentity = IdentityHelper.CreateIdentity(strUID, strDomain, strPassword) objContext = objIdentity.Impersonate …draw chart… undo impersonation, revert to logged-in user's credentials. objContext.Undo()
Fitzsimon IT C ONSULTING PTY LTD IdentityHelper.CreateIdentity See attached IdentityHelper.vb
Fitzsimon IT C ONSULTING PTY LTD Generating graphics on the server Office Web Components 2003 installed on Server Imports Microsoft.Office.Interop.Owc11 create a ChartSpaceClass object | add a chart to it Protected Overrides Sub CreateChildControls() chSpace = New ChartSpaceClass chart = chSpace.Charts.Add(0) Allow custom drawing within chart space chSpace.AllowRenderEvents = True specify the type of graph to be displayed chart.Type = ChartChartTypeEnum.chChartTypeAreaStacked
Fitzsimon IT C ONSULTING PTY LTD What can go wrong
Fitzsimon IT C ONSULTING PTY LTD Questions Mike Fitzsimon Mikes blog Fitzsimon IT Consulting