OWIN аутентификация токенов на нескольких носителях

Я хочу внести изменения в шаблон одностраничного приложения по умолчанию для ASP.NET в VS 2013, который в настоящее время использует аутентификацию токенов на предъявителя. В примере используется app.UseOAuthBearerTokens для создания сервера токенов и промежуточного программного обеспечения для проверки токенов для запросов в одном приложении.

Я хотел бы оставить это на месте, но добавить второе приложение (привязанное в IIS к тому же домену, другой путь - например, / auth / * для сервера аутентификации и / app1 / * для приложения). Для второго приложения я хочу, чтобы оно принимало токены, выданные сервером аутентификации в первом приложении. Как это могло быть достигнуто? Я попробовал следующее в Startup.Auth.cs, просто уходя из кода в UseOAuthBearerTokens, но я получаю 401 ответ на любые запросы с атрибутом [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);
        }
    }

Очевидно, мне не хватает той части, где у второго приложения есть какой-то способ проверить, что токены пришли из первого приложения. Какой-то публичный ключ подписи?

Это просто для доказательства концепции.

Редактировать: предложение машинного ключа работало достаточно хорошо для демонстрации POC, и хорошо знать, что есть варианты реализации AS, которые поддерживают другие ключевые сценарии.

Мне удалось создать ключ DEMO (не использовать для производства), используя этот сайт:http://aspnetresources.com/tools/machineKey

И поместил результат под<system.web> элемент в файле web.config каждого приложения, размещенного на сайте IIS. Мне также пришлось удалить некоторые специфичные для AS параметры конфигурации в классе запуска сервера ресурсов.

Ответы на вопрос(4)

Ваш ответ на вопрос