В рамките на моето уеб приложение съм регистрирал Google като доставчик на еднократно влизане:
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions {
ClientId = "8765.......apps.googleusercontent.com",
ClientSecret = "Secret"
})
Приложението ми не позволява на потребителите да се регистрират/регистрират (вместо това акаунтите им се създават от администратор, но те могат по-късно да свържат акаунта си с Google).
В моя контролер „Вход с Google“ се опитвам да издам Challenge()
за пренасочване към Google. Това може да не е правилният подход:
string redirectUri = "http://localhost:55262/SSO/Google/ProcessToken"; // actually created in code, but shown as string for clarity
AuthenticationProperties properties = new AuthenticationProperties();
properties.RedirectUri = Server.UrlEncode(redirectUri);
Context.GetOwinContext().Authentication.Challenge(properties, "Google");
Това правилно изпраща потребителя към Google, но след това Google представя Грешка: redirect_uri_mismatch, като казва, че:
URI адресът за пренасочване в заявката: http://localhost:55262/signin-google не съответства на регистриран URI за пренасочване.
Виждал съм тази грешка и преди, когато колекцията URI за връщане в контролния панел на Google не съдържа посочения redirect_uri
.
Ако отстранявам грешки във VS2015, виждам, че свойството redirect_uri
е зададено правилно в AuthenticationProperties
, но изглежда, че OWIN/Katana не го предава на Google. Вместо това, когато натисна Google, return_uri е този по подразбиране, използван от OWIN/Katana. Този, който зададох, се игнорира.
Подробностите за заявката на Google изглежда потвърждават това:
scope=openid profile email
response_type=code
redirect_uri=http://localhost:55262/signin-google
Какво правя грешно тук, моля? Не трябва ли да използвам Challenge()
, за да позволя на потребителите да свържат акаунта си за локално приложение с Google?