我正在创建一个WebAPI(OData)项目,并使用Asp.Identity进行用户管理。我已阅读Change Primary Key for Users in ASP.NET Identity并且一切按照规定运行,我不知道如何配置承载令牌。在Tom FitzMacken的例子中,他按如下方式配置Cookie身份验证。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator
.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) =>
user.GenerateUserIdentityAsync(manager),
getUserIdCallback:(id)=>(id.GetUserId<int>()))
}
});
以下是我的身份验证码,取自Mike Wasson的优秀文章Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2
// 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),
AllowInsecureHttp = true
};
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);
我认为我必须对OAuthAuthorizationServerProvider做一些事情来提供等效的&#34; getUserIdCallback&#34;,但我对它不了解。
我的问题是,如何使用app.UseOAuthBearerTokens(OAuthOptions)做同样的事情?
[编辑] 我看到的症状是来自我的控制器,GetUserId()总是返回0。
User.Identity.GetUserId<int>()
答案 0 :(得分:0)
这是我的错。我试图从我的控制器调用User.Identity.GetUserID&lt;&gt;()并且它总是返回0.事实证明,只有当我从.ctor调用它时才会这样。当我从任何方法使用GetUserInfo()时,它按预期工作。