我想在VS 2013中對ASP.NET的默認單頁面應用模板進行修改,該版本當前使用承載令牌認證。該示例使用app.UseOAuthBearerToken創建令牌服務器和中間件,以驗證同一應用程序中的請求的令牌。OWIN多應用不記名令牌認證
我想要做的就是保留這個位置,但添加第二個應用程序(在IIS中綁定到相同的域,不同的路徑 - 例如/ auth/*用於身份驗證服務器,/ app1/*用於該應用程序)。對於第二個應用程序,我希望它接受認證服務器在第一個應用程序中發出的令牌。這怎麼可能完成?我曾嘗試在Startup.Auth.cs剛準備關在UseOAuthBearerTokens代碼的下面,但我得到401點的響應與[授權]屬性的任何請求:
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
,並放置在每個應用程序中的IIS網站託管在web.config中<system.web>
元素下的結果。我還必須刪除資源服務器啓動類中的一些特定於AS的配置選項。
+1在整個Web場中使用相同的機器密鑰,以允許在多個服務器上使用相同的訪問/承載令牌。今天我學會了「默認數據保護提供程序......在IIS上將使用ASP.NET機器密鑰數據保護」https://msdn.microsoft.com/en-us/library/microsoft.owin.security.oauth.oauthauthorizationserveroptions( v = vs.113).aspx – Dunc
對於使用機器密鑰不是+1。整個下午一直在與這些東西作鬥爭,而機器鍵並不能解決我的問題。剛推出了我自己的IDataProtector,並試圖弄清楚如何在鏈條中實現這一切,並且我遇到的每一個樣本都會讓人感覺像機器鑰匙一樣神聖。瘸! –