【发布时间】:2018-07-23 05:30:53
【问题描述】:
抱歉,如果这个问题措辞不当,我是身份验证新手。
我有一个 ASP.NET MVC 项目为我的 Web 前端提供服务,它使用 OWIN 和基于身份 cookie 的身份验证进行身份验证。这似乎与我的 Web API 无关。
我还有一个 ASP.NET Web API 项目,该项目也使用 OWIN 和基于身份令牌的身份验证进行身份验证,例如向 /Token 端点发出请求并获取可用于向 API 端点发出请求的不记名令牌。当使用通过 /Token 端点生成的不记名令牌通过邮递员调用时,这工作正常,但是当我想从 MVC 应用程序调用 API 时没有密码,我不能使用令牌端点生成一个令牌。
我的问题是我希望能够从经过身份验证的 ASP.NET MVC 应用程序向 ASP.NET Web API 发出请求,我将如何生成一个可以调用 Web API 的令牌?鉴于我有一个已通过身份验证的 ClaimsIdentity。
我的 MVC 项目的 Startup.Auth 是:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
// Configure the db context, user manager and signin manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
// 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
// Configure the sign in cookie
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
}
}
我的 Web API 项目的 Startup.Auth 是:
public partial class Startup
{
public static OAuthAuthorizationServerOptions OAuthOptions { get; private 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)
{
// Configure the db context and user manager to use a single instance per request
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);
}
}
谢谢,如果有任何有用的进一步信息,请告诉我。
【问题讨论】:
标签: asp.net asp.net-identity owin