0

私は次のようなシナリオに取り組んでいます: ユーザーが 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();
    }

どうもありがとう!

4

1 に答える 1

0

最後に、自分の質問に答えることができました (自分で答えるのは嫌いですが、それがうまくいくこともあります...) 詳細は次のとおりです。どこかで誰かの役に立てば幸いです。

于 2012-05-22T20:04:45.003 に答える