Autenticación de token de portador de múltiples aplicaciones OWIN

Deseo realizar una modificación en la plantilla de aplicación de página única predeterminada para ASP.NET en VS 2013, que actualmente utiliza la autenticación de token de portador. El ejemplo utiliza app.UseOAuthBearerTokens para crear el servidor de token y el middleware para validar tokens para solicitudes en la misma aplicación.

Lo que me gustaría hacer es dejar eso en su lugar, pero agregar una segunda aplicación (vinculada en IIS al mismo dominio, ruta diferente, por ejemplo, / auth / * para el servidor de autenticación, y / app1 / * para la aplicación). Para la segunda aplicación, quiero que acepte tokens emitidos por el servidor de autenticación en la primera aplicación. ¿Cómo podría lograrse esto? He intentado lo siguiente en Startup.Auth.cs simplemente saliendo del código en UseOAuthBearerTokens, pero obtengo 401 respuestas a cualquier solicitud con el atributo [Autorizar]:

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 me estoy perdiendo la parte en la que la segunda aplicación tiene alguna forma de validar que los tokens provienen de la primera aplicación. ¿Una clave de firma pública de algún tipo?

Esto es sólo para una prueba de concepto.

Edición: la sugerencia de la clave de la máquina funcionó lo suficientemente bien como para la demostración de POC, y es bueno saber que hay opciones de implementación de AS que admiten otros escenarios clave.

Pude generar una clave DEMO (no usar para producción) usando este sitio:http://aspnetresources.com/tools/machineKey

Y colocó el resultado bajo la<system.web> Elemento en el web.config de cada aplicación alojada en el sitio de IIS. También tuve que eliminar algunas de las opciones de configuración específicas de AS en la clase de inicio del servidor de recursos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta