Соединение oAuth с неверным приведением удостоверений ASP.Net - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать новый веб-API на существующей базе данных ASP.Net Identity.Я следую основному руководству по веб-API и создаю новый проект в VS2017, который можно найти на сайте Microsoft.

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

Я хотел бы реализовать oAuth с помощью этого нового веб-API;однако когда я выполняю POST для URL-адреса http://localhost:12345/TOKEN, который содержит имя пользователя / пароль существующего пользователя, метод ApplicationUserManager FindAsync выдает ошибку, сообщающую, что преобразование типа недопустимо.

Указанное приведение из материализованного типа 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
}

Я сравнил таблицы базы данных AspNetUsers, которые VS2017 создает, с нашей существующей базой данных, которую я хочу использовать, и таблицы AspNetUsers соответствуют с точки зренияимена столбцов и типы данных, за исключением столбца Id.Наша существующая БД использует INT, а созданная автоматически использует ncvarchar.Я предполагаю, что это несоответствие, но я не уверен, почему их схемы не будут совпадать с самого начала.

Есть ли способ изменить тип данных, который ожидает диспетчер пользователей приложения, поэтому он не ищет этот nvarchar?

...