4

Azure ワーカー ロールで Owin WebAPI サーバーをホストしました。
Owin 認証ミドルウェアは、トークンの暗号化と生成に MachineKey を使用しているようです。これは、このロールのインスタンスが 1 つしかない場合は完全に機能しますが、複数のインスタンスを使用したいとすぐに、各インスタンスによって生成されるトークンが異なります。

これは Web ファームと同じ問題です。Azure は、Web.config のすべてのインスタンスに対して同じ .net マシン キーを使用して、WebRoles についてこれを自動的に解決します。

ただし、これは Worker Role インスタンスでは機能しません。

worker Role のすべてのインスタンスに対して同じマシン キーを Azure に使用させるトリックはありますか?

コードを書き直して Owin のトークンを生成するよりも簡単なようです。

4

1 に答える 1

4

自己ホスト型アプリケーションが を参照System.Webできる場合は、 と同じMachineKey実装を使用できますMicrosoft.Owin.Host.SystemWeb

configuration/system.web/machineKeyWeb.config と同じように、設定を App.config に入れます。

参照を参照System.Webし、次のクラスを追加します。

public class MachineKeyDataProtector : IDataProtector
{
    private readonly string[] purposes;

    public MachineKeyDataProtector(params string[] purposes)
    {
        this.purposes = purposes;
    }

    public byte[] Protect(byte[] userData)
    {
        return MachineKey.Protect(userData, this.purposes);
    }

    public byte[] Unprotect(byte[] protectedData)
    {
        return MachineKey.Unprotect(protectedData, this.purposes);
    }
}

次に、そのクラスを使用して認証オプションを設定します。

        var authenticationOptions = new OAuthBearerAuthenticationOptions
                                    {
                                        AccessTokenFormat = new TicketDataFormat(new MachineKeyDataProtector(
                                            typeof(OAuthBearerAuthenticationMiddleware).Namespace, "Access_Token", "v1")),
                                        AccessTokenProvider = new AuthenticationTokenProvider(),
                                    };
于 2015-02-06T22:33:30.533 に答える