2015-07-27 3 views
0

Я пытаюсь использовать OWIN для входа в систему с помощью простой простой аутентификации, но я не могу заставить ее работать вообще. Я чувствую, что я пропустил что-то очень простое, но, похоже, не могу понять. Я не нуждаюсь ни в чем, кроме сохранения адреса электронной почты человека и не желаю oauth, что, по-видимому, показывает большинство учебных пособий и образцов. Когда я запускаю приведенный ниже код, я никогда не подписываюсь и утверждения аутентификации всегда пусты, когда я смотрю в отладчике.OWIN простой логин не входит в систему

Моей Бритва веб-страница:

@using System.Security.Claims; 
@{ 

    Microsoft.Owin.IOwinContext ctx = Request.GetOwinContext(); 
    var usr = Request["text1"]; 
    if (IsPost && usr == "[email protected]") 
    { 
     ctx.Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie); 

     var claims = new List<Claim>(); 
     claims.Add(new Claim(ClaimTypes.Email, usr)); 
     claims.Add(new Claim(ClaimTypes.Name, var)); 
     var id = new ClaimsIdentity(claims, Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie); 
     ctx.Authentication.SignIn(id); 
     //FormsAuthentication.SetAuthCookie("[email protected]", false); // Also fails 
    } 
    var IP = HttpContext.Current.User.Identity.IsAuthenticated.ToString(); 
    var text = "[email protected]"; 

} 
<!DOCTYPE html> 
<html lang="en"> 
    <head><title></title></head> 
    <body> 
     <p>Are we Logged in? <strong>@IP</strong>.</p> 
     <form action="" method="post"> 
      <p> 
       <label for="text1">First Number:</label> 
       <input type="text" name="text1" value="@text" /> 
      <p><input type="submit" value="Add" /></p> 
     </form> 
    </body> 
</html> 

с классом пускового

using Microsoft.AspNet.Identity; 
using Microsoft.Owin; 
using Microsoft.Owin.Security; 
using Microsoft.Owin.Security.Cookies; 
using Owin; 

[assembly: OwinStartup(typeof(TypeScriptHTMLApp1.Startup1))] 

namespace TypeScriptHTMLApp1 
{ 
    public class Startup1 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=316888 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType =DefaultAuthenticationTypes.ApplicationCookie, 
       AuthenticationMode = AuthenticationMode.Passive, 
      }); 
     } 
    } 
} 

Почему всегда возвращается ложью и как я могу сделать это успешно войти в системе?

+1

Вы используете его локально? Вы используете его под SSL? Если вы не используете SSL, вы должны установить requireSsl = «false» в свой web.config (в файле system.identityModel.services - federationConfiguration - cookieHandler. В ответ вы должны увидеть некоторые файлы cookie после метода SignIn. t, это одна из возможных причин. –

+0

Ага! Вот и все! У меня пока нет SSL, и я не требую, чтобы SSL исправил его. – byteit101

ответ

1

Если вы работаете локально, а не под SSL, убедитесь, что вы инструктируете обработчик cookie не требовать SSL. В противном случае он никогда не выйдет из файла cookie, и похоже, что ничего не происходит. На прошлой неделе меня это потрясло.

<system.identityModel.services> 
     <federationConfiguration> 
     <cookieHandler requireSsl="false" /> 
     </federationConfiguration> 
    </system.identityModel.services> 
Смежные вопросы