5
votes

I am creating a standalone asp.net page that needs to be embedded into a sharepoint site using the Page Viewer Web Part. The asp.net page is published to the same server on a different port, giving me the URL to embed.

The requirement is that after a user is authenticated using Sharepoint authentication, they navigate to a page containing the asp.net web part for more options.

What I need to do from this asp.net page is query Sharepoint for the currently authenticated username, then display this on the page from the asp.net code.

This all works fine when I debug the application from VS, but when published and displayed though Sharepoint, I always get NULL as the user.

Any suggestions on the best way to get this to work would be much appreciated.

4

4 Answers

7
votes

If you want to retrieve the currently authenticated user from the SharePoint context, you need to remain within the SharePoint context. This means hosting your custom web application within SharePoint (see http://msdn.microsoft.com/en-us/library/cc297200.aspx). Then from your custom application reference Microsoft.SharePoint and use the SPContext object to retrieve the user name. For example:

SPContext.Current.Web.CurrentUser.LoginName

You can still use the Page Viewer Web Part to reference the URL of the site, now located within the SharePoint context.

1
votes

Thanks heaps for the answers!

Turns out that as long as the asp.net page is using the same URL and port as the Sharepoint site, authentication works across both sites.

The solution is to use a Virtual Directory inside of the sharepoint site and install the asp.net page there.

0
votes

When it works in debug, is that being used in SharePoint?

Your page and the Sharepoint site might as well be on different servers as far as authentication is concerned -- in order to get the information over you might need to pass it via the QueryString from the webpart if you can -- or you might need to make your own webpart to do this (just put an IFRAME in the part with the src set to your page with the QueryString passing the username).

It does seem that this would be a security issue if you use the name for anything though -- if you are just displaying it, then it's probably fine.

If you actually need to be authenticated, you might need to add authentication into the web.config of the site hosting your standalone page.

edit: I think you'd have better luck putting your page on the same port and server as SharePoint.

0
votes

I suspect you will have a hard time specifically querying SharePoint for the currently authenticated username. I can't think of a way to easily access the SharePoint context from a separate web application like you are describing.

I don't know what kind of authentication scheme you are using, but you may want to consider using Kerberos, as I've found that it can make these kinds of scenarios a little easier by allowing for delegation and passing credentials from application to application or server to server.