将oAuth与ASP.Net Identity无效连接

时间:2018-11-20 16:44:10

标签: asp.net-web-api oauth-2.0 asp.net-identity

我正在尝试在现有的ASP.Net Identity数据库上构建新的Web API。我正在遵循基本的Web API教程,并在Microsoft网站上的VS2017中创建一个新项目。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api

我想用这个新的Web API实现oAuth;但是,当我对包含现有用户名/密码的http://localhost:12345/TOKEN URL进行POST时,ApplicationUserManager FindAsync 方法会引发错误,告诉我类型转换无效。 / p>

从实例化的“ System.Int32”类型到“ System.String”类型的指定强制转换无效。

这是我要发送的POST:

$("button").click(function(){
    var loginData = {
    grant_type: 'password',
    username: 'user@somewhere.com',
    password: 'password'
    };
    $.ajax({
        type: 'POST',
        url: 'http://localhost:12345/Token',
        data: loginData
    }).done(function (data) {
        self.user(data.userName);
        // Cache the access token in session storage.
        sessionStorage.setItem(tokenKey, data.access_token);
    });
});

这是C#端

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

        ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);


   //Rest omitted for readability
}

我将VS2017创建的AspNetUsers数据库表与我要使用的现有数据库进行了比较,除了ID列之外,AspNetUsers表在列名和数据类型方面都匹配。我们现有的数据库使用INT,而自动创建的数据库使用ncvarchar。我以为这是差异,但是我不确定为什么它们的架构最初不会匹配。

是否有一种方法可以更改应用程序用户管理器期望的数据类型,以便它不查找该nvarchar?

0 个答案:

没有答案