ブートストラップトーク(ACS認証)のNullReferenceException

I've been following the steps to make a Windows 8 Store app get an ACS token as described here: Does the WebAuthenticationBroker work in Windows 8 Metro App post Release Candidate

Windows 8クライアントの認証方法

private async void Authenticate()
    {
        WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
            WebAuthenticationOptions.None,
            new Uri("https://myACSnamespace.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http://localhost:12714/"),
            new Uri("http://mypublicIPaddress:80/WebAppMVCAPI/api/federation/end"));

Webアプリケーションのコントローラは、次のようにプログラミングされています。

public class FederationController : ApiController
{
    protected virtual string ExtractBootstrapToken()
    {
        return HttpContext.Current.User.BootstrapToken();
    }

    [HttpGet]
    public string Get()
    {
        return "Hello Get World";
    }

    [HttpPost]
    public HttpResponseMessage Post()
    {
        var response = this.Request.CreateResponse(HttpStatusCode.Redirect);
        response.Headers.Add("Location", "/WebAppMVCAPI/api/federation/end?acsToken=" + ExtractBootstrapToken());
        return response;
    }
}

}

このアイデアは、Windows 8のストアアプリに、Facebookのログイン情報を使ってACSからトークンを取得させることです。 win8クライアントを起動すると、アプリケーションはFacebookログインページを表示します。ただし、次の例外を除いて、 return HttpContext.Current.User.Bootstraptoken()命令が失敗します。

NullReferenceException。オブジェクト参照がオブジェクトのインスタンスに設定されていません。

私のweb.configは次のようになります:

  

  
    
  
  
    
    
  
  
    <trustedIssuers>
      
    
  
  
    
  
  

Bootstraptokenメソッドを使用してACSトークンを取得する方法について、誰かが気をつけてもらえますか?

ありがとう ルイス

1
nl ru de

2 答え

あなたはこれを試しましたか?

BootstrapContext bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as BootstrapContext;                                  
SecurityToken st = bootstrapContext.SecurityToken;

Take a look on Vittorio's post: http://blogs.msdn.com/b/vbertocci/archive/2012/11/30/using-the-bootstrapcontext-property-in-net-4-5.aspx

0
追加された
いいえ。私のIDルーチンは.NET 4.0(Microsoft.identitymodel)を使用していますが、それらを更新することはあまり面倒ではないでしょうか。ありがとう
追加された 著者 Luis Delgado,

私は、フェデレーション認証がデフォルトでHttpContext.Userを設定するとは思わない。試す

(Thread.CurrentPrincipal as IClaimsPrincipal).Identities[0].BootstrapToken

サイトのトークン・ハンドラ・パイプライン(WS-FAM)を通過したと仮定すると、これは移入されます。これはSecurityTokenオブジェクトで、適切なSecurityTokenHandlerクラスを使用してシリアル化できます。

0
追加された
こんにちはオレン、返事をありがとう。このコードは、Windows 8 ToolkitのACSサンプルに掲載されたものと同じです。興味深いのは、私がそのサンプルのプロジェクトを実行して実行すると、それが機能するということです。しかし、私のコード(上記のように)は、上記の例外で失敗します。私は、MVCプロジェクトとダウンロードしたサンプルを適切にセットアップしていないものがあると仮定していますが、何が分かりませんか?
追加された 著者 Luis Delgado,
WSFederationAuthenticationModuleが構成されていますか? msdn.microsoft.com/en-us/library/ &hellip;
追加された 著者 Oren Melzer,