8

私の会社では、プロジェクトに wsFederation 認証を使用できるかどうかを確認するために POC を作成する必要があります。このプロジェクトには、MVC アプリ、いくつかの webapi コントローラー、およびいくつかの signalR ハブがあり、すべて異なるプロジェクトにあります。また、クライアント アプリと ID プロバイダー アプリの両方で OWIN 認証ミドルウェアを使用したいと考えています。

最初は、Thinktecture Identity Server v2 を ID プロバイダーとして使用します (ただし、いずれ独自に開発する必要があります)。MVC アプリの場合、SAML2 トークンを使用すると、非常に簡単で正常に動作します。

しかし、Web アプリで認証されたユーザーがajax 呼び出しを使用して Web API アプリ (MVC とは異なります) からコントローラー メソッドを呼び出せるようにしたいので、状況は少し複雑になります。

委譲と actAs トークンについて多くのことを読みましたが、少し迷っており、この部分をどこから、どのように開始すればよいかわかりません。また、OWIN 認証を使用した委任については何も見つかりません。

だから私の最初の質問は、これを達成することは可能ですか? そして、誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

作業中はヴィットリオ・ベルトッチの指示に従いました。

http://www.cloudidentity.com/blog/2013/01/09/using-the-jwt-handler-for-implementing-poor-man-s-delegation-actas/

JWTSecurityTokenHandler と書かれている箇所は、JwtSecurityTokenHandler になりました。ちょっとしたタイプミスですが、気が付かないと15分ロスする良い方法です。

また、X509 FindByThumbprint セクションも使用できませんでした。ローカル証明書が正しく登録されていないと思います。明日仕事に就いたら、それを機能させるために変更しなければならなかったことを投稿します。

Dominick Baier ( http://leastprivilege.com/ ) は、WebApi v2 Security と呼ばれる複数サイトに関するコースも行っています。このコースでは、セキュリティ パイプラインに注入する方法と、これを処理するための Web API プロジェクトをセットアップする方法について説明しています。

別のオプションとして、Vittorio が使用する TokenValidationHandler クラスを Microsoft.Owin.Security.Jwt パッケージに置き換え、Startup.cs ファイルに次のコードを実装することもできます。

app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { ConfigurationSettings.AppSettings["ida:Realm"] },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
                    { 
                        new SymmetricKeyIssuerSecurityTokenProvider(
                            ConfigurationSettings.AppSettings["ida:ValidIssuer"],
                            ConfigurationSettings.AppSettings["ida:SymmetricKey"])
                    },
                Provider = new OAuthBearerAuthenticationProvider
                {
                    OnValidateIdentity = context =>
                    {
                        var identity = context.Ticket.Identity;
                        return System.Threading.Tasks.Task.FromResult<object>(null);
                    }
                }
            });
于 2014-07-15T02:26:45.910 に答える