Autenticação de token do portador multi-aplicativo OWIN

Eu quero fazer uma modificação para o modelo de aplicativo de página única padrão para o ASP.NET no VS 2013, que atualmente usa a autenticação de token portador. A amostra usa app.UseOAuthBearerTokens para criar o servidor de token e o middleware para validar tokens para solicitações no mesmo aplicativo.

O que eu gostaria de fazer é deixar isso em vigor, mas adicionar um segundo aplicativo (vinculado no IIS ao mesmo domínio, caminho diferente - por exemplo, / auth / * para o servidor de autenticação e / app1 / * para o aplicativo). Para o segundo aplicativo, quero que ele aceite tokens emitidos pelo servidor de autenticação no primeiro aplicativo. Como isso poderia ser feito? Eu tentei o seguinte em Startup.Auth.cs apenas saindo do código em UseOAuthBearerTokens, mas recebo 401 respostas para quaisquer solicitações com o atributo [Authorize]:

public partial class Startup
{
    static Startup()
    {
        PublicClientId = "self";

        UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());

        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            //TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
            //AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            //AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
            AuthenticationType = "ExternalBearer",
            AllowInsecureHttp = true,
        };
    }

    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

    public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; }

    public static string PublicClientId { get; private set; }

    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
    public void ConfigureAuth(IAppBuilder app)
    {
        //// Enable the application to use a cookie to store information for the signed in user
        //// and to use a cookie to temporarily store information about a user logging in with a third party login provider
        //app.UseCookieAuthentication(new CookieAuthenticationOptions());
        //app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

        OAuthBearerAuthenticationOptions bearerOptions = new OAuthBearerAuthenticationOptions();
        bearerOptions.AccessTokenFormat = OAuthOptions.AccessTokenFormat;
        bearerOptions.AccessTokenProvider = OAuthOptions.AccessTokenProvider;
        bearerOptions.AuthenticationMode = OAuthOptions.AuthenticationMode;
        bearerOptions.AuthenticationType = OAuthOptions.AuthenticationType;
        bearerOptions.Description = OAuthOptions.Description;
        bearerOptions.Provider = new CustomBearerAuthenticationProvider();
        bearerOptions.SystemClock = OAuthOptions.SystemClock;
        OAuthBearerAuthenticationExtensions.UseOAuthBearerAuthentication(app, bearerOptions);
    }
}

public class CustomBearerAuthenticationProvider : OAuthBearerAuthenticationProvider
    {
        public override Task ValidateIdentity(OAuthValidateIdentityContext context)
        {
            var claims = context.Ticket.Identity.Claims;
            if (claims.Count() == 0 || claims.Any(claim => claim.Issuer != "LOCAL AUTHORITY"))
                context.Rejected();
            return Task.FromResult<object>(null);
        }
    }

Obviamente, estou perdendo a parte em que o segundo aplicativo tem alguma maneira de validar que os tokens vieram do primeiro aplicativo. Uma chave de assinatura pública de algum tipo?

Isto é apenas para uma prova de conceito.

Edit: A sugestão de tecla da máquina funcionou bem o suficiente para a demonstração do POC, e é bom saber que existem opções de implementação do AS que suportam outros cenários importantes.

Consegui gerar uma chave DEMO (não use para produção) usando este site:http://aspnetresources.com/tools/machineKey

E colocou o resultado sob o<system.web> elemento no web.config de cada aplicativo hospedado no site do IIS. Eu também tive que remover algumas das opções de configuração específicas do AS na classe de inicialização do servidor de recursos.

questionAnswers(4)

yourAnswerToTheQuestion