更改Asp.net标识的主键和GetUserID <int> </int>

时间:2015-01-04 01:01:45

标签: c# asp.net asp.net-web-api asp.net-identity

我正在创建一个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>()

1 个答案:

答案 0 :(得分:0)

这是我的错。我试图从我的控制器调用User.Identity.GetUserID&lt;&gt;()并且它总是返回0.事实证明,只有当我从.ctor调用它时才会这样。当我从任何方法使用GetUserInfo()时,它按预期工作。