#.net-core #google-api #google-oauth #google-api-dotnet-client #google-api-js-client
#.net-core #google-api #google-oauth #google-api-dotnet-client #google-api-js-client
Вопрос:
Я использую клиент gapi в Angular для отправки запросов в Google. У меня есть следующий код.
Этот код возвращает код аутентификации из Google, но когда я использую этот код аутентификации для генерации токенов в приложении C # .NET Core, он выдает ошибку неверного запроса «redirect_uri»
Error:"redirect_uri_mismatch", Description:"Bad Request", Uri:""
Код в .СЕТЕВОЕ приложение выглядит следующим образом
Пожалуйста, помогите мне в решении этой проблемы. Я не нашел ни единой подсказки о том, как действовать дальше
Комментарии:
1. пожалуйста, отредактируйте свой вопрос и включите свой код, а не изображение вашего кода
2. вы уверены, что это .net core? GoogleAutorizationCodeFlow не должен работать с .net core.
3. @DalmTo Да, я на 100 процентов уверен, что это .NET Core Я могу использовать GoogleAuthorizationCodeFlow для обмена кодом аутентификации с токенами, т.Е. кодами аутентификации, сгенерированными с помощью вызовов REST Api, вызывая accounts.google.com/o/oauth2/auth URL-АДРЕС
4. используете ли вы консольное приложение или asp .net core?
5. ASP .NET Core 3.1 Web api @DalmTo.
Ответ №1:
Для начала для asp .net core вы должны выполнить следующие действия: Настройте свое приложение на использование Google.Apis.Auth.AspNetCore3
К вашему сведению, справочная информация:
- GoogleWebAuthorizationBroker.AuthorizeAsync (установленное приложение)
- GoogleAuthorizationCodeFlow (asp .net MVC)
Ни один из этих методов не позволит вам передать код авторизации и обменять его на токен доступа из коробки. Вероятно, я мог бы заставить его работать без особых проблем с asp.net. для этого потребуется, чтобы вы создали свою собственную реализацию idatastore, которая принимала бы код авторизации и завершала бы для вас танец oauth, но вам нужно будет правильно настроить URI перенаправления. IMO: в любом случае вы не должны передавать код авторизации на серверную часть.
С .net core я не уверен, что это вообще возможно, передать библиотеке код авторизации и завершить танец.
Почему?
Другой проблемой будет тот факт, что вы используете два разных метода, чтобы попытаться создать это, что, я думаю, тоже не сработает. Вам нужно либо аутентифицироваться исключительно с помощью angular, либо аутентифицироваться исключительно с помощью .net core. Выберите один, не пытайтесь их смешивать.
TBH, я даже не уверен, что js-клиент Google api поддерживает автономный доступ, поскольку чистый JavaScript является клиентским и не допускает его.
Комментарии:
1. @DalmTo Я согласен с тем, что сказано выше. Но у меня есть сценарий, в котором вам нужно предоставить автономный доступ к областям. Я обнаружил, что метод authInstance().grantOfflineScopes() в GAPI выдает код аутентификации в angular, который дает вам возможность доступа к API
2. Почему бы просто не запросить автономный доступ из .net core? зачем вам для этого нужен angular?
3. Есть ли способ ввести учетные данные пользователя со стороны API.
4. Я не уверен, что понимаю вопрос. Если вы используете Asp .net core, просто следуйте этому developers.google.com/api-client-library/dotnet/guide / … по умолчанию он должен предоставлять автономный доступ, но мне придется перепроверить, и я не уверен, где он хранит своих пользователей, возможно, вам придется это настроить.
5. Хорошо @DalmTo Спасибо.
Ответ №2:
URI перенаправления сервера должен совпадать с исходным кодом вашего приложения angular, и он должен быть внесен в белый список в вашем клиенте Google (как для источника, так и для перенаправления)