2015-05-08 2 views
1

Я пытаюсь реализовать внешний вход google с помощью owin, мне не нужно сохранять пользователя в Db, все найденные мной демо привязаны к EntityFramework, поэтому я попытался раздеть его и попал в рабочей реализации здесь:Bare minimum Owin OAuth внешний вход

public partial class Startup 
{ 
    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("/Account/Login") 
     }); 

     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     app.UseGoogleAuthentication("myid00000000000.apps.googleusercontent.com", "mysecret"); 
    } 
} 

и контроллер:

public class AccountController : Controller 
{ 
    private const string XsrfKey = "XsrfId"; 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult ExternalLogin(string provider, string returnUrl) 
    { 
     // Request a redirect to the external login provider 
     return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl })); 
    } 

    // 
    // GET: /Account/ExternalLoginCallback 
    [AllowAnonymous] 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 
     var loginInfo = await HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync(); 
     if (loginInfo == null) 
     { 
      return Content("failed"); 
     } 

     return Content("logged in"); 
    } 

internal class ChallengeResult : HttpUnauthorizedResult 
... 

теперь я не знаю наверняка, если этого достаточно, если я не пропустил некоторые шаги проверки пользователя, , когда я вызываю Authentication.GetExternalLoginInfoAsync(), и получаю ненулевой результат. означает, что я могу быть уверен, что информация в loginInfo действительно поступает из Google или мне нужно сделать некоторые дополнительные запросы в Google, чтобы проверить эту информацию?

+0

Нет, с тобой все должно быть хорошо. Но, если вы не доверяете ему, отлаживайте и проверяйте все, что происходит, поэтому вы можете сами убедиться, что он работает. –

+0

@ChrisPratt, когда я его отлаживаю loginInfo имеет имя профиля, адрес электронной почты, исходящий от google, это просто мой первый эксперимент с этим, и я думал, что мне нужно проверить эту информацию, думаю, owin уже сделал это –

ответ

0

Допустим, что вы сохранили вывод Authentication.GetExternalLoginInfoAsync() в переменной «loginInfo»

Теперь проверьте значение loginInfo.Result.Login.LoginProvider. Если значение «Google», то полученная вами информация была получена от Google.

Смежные вопросы