I'm planning to implement an external-facing ASP.NET web application along with a Windows Communication Foundation (WCF) service providing an externally available API. I will provide security for the web app and service by rolling my own Security Token Service (STS) using the Windows Identity Foundation (WIF).
The basics for how I intend to implement this are described by these articles: http://msdn.microsoft.com/en-us/magazine/ee335707.aspx and http://devproconnections.com/development/generating-saml-tokens-wif-part-2
combined with the information provided by Vittorio Bertocci's excellent book on the subject: http://www.amazon.com/Programming-Windows-Identity-Foundation-Dev/dp/0735627185/ref=sr_1_6?ie=UTF8&qid=1366300926&sr=8-6&keywords=vittorio+bertocci
I should have all the tools and information I need to accomplish this task. The use-case for the application is this: user logs into an ASP .NET web application that we own, including the user authentication and authorization mechanism. While on this application, they click a link that uses SAML to single-sign-on (SSO) to a third-party application (with whom we have a tight business relationship with). While on this third-party application, the user can transparently work with files we're storing on yet another application internal to our organization. Basically, they will do a transparent/silent SAML SSO against my web app/WCF service to either save out or retrieve a document while logged into the third-party web app.
Like I said before, I think I have the basics for how to implement the authorization and authentication down for this process.
However, one item that my security team has asked is that we ensure that the user who logged in to the third-party site from out externally-exposed yet totally-owned-by-us originating web application, has an active session with out site. In short, we need to ensure this user is actually logged into site A, is using site B, but wants to access resources on site C by ensuring they, in fact, are logged into site A still.
How would I get this information regarding this user? Now, I did roll my own role provider for site A, but authentication is performed via Forms Authentication using an older username/password mechanism that does not include using an ASP .NET 2.0 "standard" membership provider. Therefor, Security.Web.Membership is not available to me.
Finally, this same process will apply to internal users on our active directory who will log in from our internal network, to site B, and then work with site C again. I believe we will be using ADFS v2 for authentication. Any tips on ensuring said user is active in the AD prior to authenticating against site C?