私は次のようなシナリオに取り組んでいます: ユーザーが SAP サイトのリンクをクリックすると、SharePoint サイトに移動します。シングル サインオンを実現するために、http モジュールは SAP Cookie を受け取り、ユーザー名を取得して、ユーザーを SharePoint にログインさせます。
SP 2007 に実装すると、以前は機能していました。単に SetAuthCookie(username) を呼び出すだけで機能し、ユーザーが SharePoint 2007 サイトにアクセスすると、すべてが期待どおりに機能しました。
SharePoint 2010 クレーム Web アプリでは、機能しなくなりました。これは、Steve Peschka の素晴らしい記事によると、ほぼ予想通りです。だから先に進んで SetAuthCookie() コードの置き換えを開始しましたが、2 つの問題に直面しています。
これが私のカスタムサインインコードです。パスワードを必要としない SetAuthCookie() に相当するものはありますか? (ハードコードされた URL と PWD は気にしないでください... ただのプロトタイプです)
private SPIisSettings IisSettings
{
get
{
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://virtualcasa1/sites/blank2"));//XXX
SPIisSettings settings = webApp.IisSettings[SPUrlZone.Default];
return settings;
}
}
private SecurityToken GetSecurityToken()
{
SecurityToken token = null;
SPIisSettings iisSettings = IisSettings;
Uri appliesTo = new Uri("http://virtualcasa1");//XXX
SPFormsAuthenticationProvider authProvider = iisSettings.FormsClaimsAuthenticationProvider;
token = SPSecurityContext.SecurityTokenForFormsAuthentication(appliesTo, authProvider.MembershipProvider, authProvider.RoleProvider, "userfba", "pa55word");//XXX
return token;
}
private void SignIn()
{
SecurityToken token = null;
if ((token = GetSecurityToken()) != null)
{
SPFederationAuthenticationModule fam = SPFederationAuthenticationModule.Current;
HttpContext c = HttpContext.Current;
fam.SetPrincipalAndWriteSessionToken(token);
c.Response.Redirect("/sites/blank2");//XXX
}
}
void OnAuthenticateRequest(object sender, EventArgs e)
{
HttpContext c = HttpContext.Current;
if (c.Request.Url.ToString().ToLowerInvariant().Contains("/authenticate.aspx"))
{
SignIn();
}
どうもありがとう!