1

WebApiSecurity の Thinktecture.IdentityModel 4.0 サンプルを使用しています。ADFS サーバーを使用するように AdfsSamlClient を変更しました。を使用して ADFS サーバーから SAML トークンを取得できます

        var channel = factory.CreateChannel();
        var token = channel.Issue(rst) as GenericXmlSecurityToken;

次に、サービス呼び出しを試みます

        var client = new HttpClient { BaseAddress = _baseAddress };
        client.DefaultRequestHeaders.Authorization = 
            new AuthenticationHeaderValue("AdfsSaml", saml);

        var response = client.GetAsync("identity").Result;

そして、401 - Not Authorized コールを受けます。

これをデバッグする方法がわかりません。Microsoft.IdentityModel のトレースがありますが、情報レベルのトレースのみで、エラーや警告はなく、デバッグに使用できるものはありません。

サービス トレースの興味深い部分:

1.
説明 OnEndRequest は IdentityProvider '/WebHost/api/identity' へのリダイレクトです

2.
説明 CreateSignInRequest
BaseUri https://[ADFS...]/adfs/ls/
は wsignin1.0
wtrealm https://[ワークステーション...]/WebHost/
wctx rm=0&id=パッシブ&ru=%2fWebHost%2fapi%2fidentity

3.
説明 IdentityProvider にリダイレクトしています: 'https://[ADFS...]/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2f[WorkStation...]%2fWebHost%2f&wctx=rm%3d0% 26id%3dpassive%26ru%3d%252fWebHost%252fapi%252fidentity&wct=2013-09-30T17%3a35%3a04Z'

洞察をありがとう。

4

1 に答える 1

0

主に頭に浮かぶのは、使用している「AdfsSaml」スキームの処理方法をサーバーが認識していることを確認することです。そのため、トークン ハンドラーへのマッピングが正しいことを確認する必要があります。

私が試したことの 1 つは、独自のトークン ハンドラーを作成し、それをヘッダーのトークン ハンドラーとしてマップすることでした。必要に応じて、Thinktecture 独自の HttpSamlSecurityTokenHandler から開始し、それを介してデバッグすることができます。明らかに、ヒットしない場合は、どこかにマッピングの問題があります。

また、ClaimsAuthenticationManager で例外がスローされた場合、スローされた例外がまったく関係のないもの (私の場合は InvalidCastException) であっても、未承認として報告されることもわかりました。認証がパイプラインのはるか下にあり、トークンの検証が実際に成功したことを認識していなかったので、しばらくの間、私は困惑しました.そんな些細なことで惑わされたりはしません。

于 2013-11-22T19:56:56.423 に答える