我读过很多关于OWIN和Katana项目的文章,但我无法全面了解它.
对于使用ASP.NET的普通Web开发人员:
我是OWIN和Katana的新手.我真的不明白为什么我应该使用OWIN,而我可以使用IIS
.为了简化,我的问题是:如果我跳过学习OWIN并在我的网站上使用IIS,我会失去什么?
我用谷歌搜索,但没有一个简单的解释.有一些信息,在这里,但他们使用的一些术语的短语,所以我无法理解这一点.
使用Owin cookie身份验证时遇到一个奇怪的问题.
当我启动我的IIS服务器时,身份验证在IE/Firefox和Chrome上运行得非常好.
我开始使用身份验证进行一些测试并在不同的平台上登录,我想出了一个奇怪的错误.偶尔Owin框架/ IIS只是不向浏览器发送任何cookie.我将输入一个用户名和密码,该代码运行正确,但根本没有cookie传递给浏览器.如果我重新启动服务器它开始工作,那么在某些时候我将尝试登录并再次cookie停止交付.单步执行代码不会做任何事情并且不会抛出任何错误.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
CookieHttpOnly = true,
AuthenticationType = "ABC",
LoginPath = new PathString("/Account/Login"),
CookiePath = "/",
CookieName = "ABC",
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = ctx =>
{
if (!IsAjaxRequest(ctx.Request))
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
在我的登录程序中,我有以下代码:
IAuthenticationManager authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var authentication = HttpContext.Current.GetOwinContext().Authentication;
var identity = new ClaimsIdentity("ABC");
identity.AddClaim(new Claim(ClaimTypes.Name, user.Username));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.User_ID.ToString()));
identity.AddClaim(new Claim(ClaimTypes.Role, role.myRole.ToString()));
authentication.AuthenticationResponseGrant =
new AuthenticationResponseGrant(identity, new AuthenticationProperties()
{
IsPersistent = isPersistent
}); …
Run Code Online (Sandbox Code Playgroud) 我的理解是,您目前可以使用Katana自行托管WebAPI,MVC将在未来版本中具备此功能.基本上Katana将是MVC和WebAPI都可以使用的托管选项.
Kestrel进入了这一局面,我看到一些MS员工在博客上发表了关于它在Linux上托管ASP.NET vNext的信息.
我的理解是Kestrel和Katana都实现了OWIN管道.
从那里它有点模糊.我问自己,为什么Kestrel进入了画面,当看起来Katana可以起到同样的作用,如果你用mono编译它并做了一些努力使它跨平台兼容(也许说起来容易做起来难).
Kestrel和Katana是否有同样的目的?或者是一个专门以某种方式而另一个不是?
Kestrel最终会成为Windows部署的可行选择吗?或者它是否适用于非Windows环境,而Katana仍然是Windows的选择?
我认识到,由于我对Katana/Kestrel缺乏了解,我可能会要求苹果与橘子进行比较,但如果答案是"橘子的酸味比苹果更多",那么IMO就是一个非常有效的答案.
我是ASP.NET的新手,目前正在学习ASP.NET身份.我知道它建立在微软的OWIN实现之上,而且我也在学习它.所以,我在Owin启动代码中遇到了扩展方法CreatePerOwinContext,我没有看到使用它的明确目的.它是某种依赖注入容器吗?这个方法的真正目的是什么?在什么情况下应该应用它?
在我们的Startup
课程中,我配置了以下auth服务器选项:
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/v1/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
Run Code Online (Sandbox Code Playgroud)
在此之后,我们应该使用哪个选项来实际启用承载身份验证?互联网上似乎有两种变体.
选项1:
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
Run Code Online (Sandbox Code Playgroud)
选项2:
app.UseOAuthBearerTokens(OAuthServerOptions);
Run Code Online (Sandbox Code Playgroud)
我对它们进行了测试,结果是一样的.
这些选项有什么区别?我们什么时候应该使用哪个?
owin katana asp.net-identity asp.net-web-api2 asp.net-identity-2
我不太明白...确定它能够自我托管一个应用程序很酷,它可能很好,因为如果IIS出于任何原因失败...那么你的所有网站都会崩溃..但如果它们是自我托管然后他们住在那里自己的生活在自己的背景..我猜这很好..但我仍然没有得到这个的优点..我在IIS管道中通过使用owin加速应用程序快速跳过很多不必要的东西,或者......实际的职业选手是什么?(你不需要列出所有这些,如果它们很多:),但我知道你为什么要在IIS上使用OWIN和Katana)
提前致谢!
我试图了解MVC 5中单页应用程序模板中新的OWIN Bearer Token身份验证过程.如果我错了请更正我,对于OAuth密码客户端身份验证流程,承载令牌身份验证通过检查http授权请求标头来工作对于承载访问令牌代码,以查看请求是否经过身份验证,它不依赖cookie来检查特定请求是否经过身份验证.
根据这篇文章:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
using (IdentityManager identityManager = _identityManagerFactory.CreateStoreManager())
{
if (!await identityManager.Passwords.CheckPasswordAsync(context.UserName, context.Password))
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
string userId = await identityManager.Logins.GetUserIdForLocalLoginAsync(context.UserName);
IEnumerable<Claim> claims = await GetClaimsAsync(identityManager, userId);
ClaimsIdentity oAuthIdentity = CreateIdentity(identityManager, claims,
context.Options.AuthenticationType);
ClaimsIdentity cookiesIdentity = CreateIdentity(identityManager, claims,
_cookieOptions.AuthenticationType);
AuthenticationProperties properties = await CreatePropertiesAsync(identityManager, userId);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
}
Run Code Online (Sandbox Code Playgroud)
GrantReourceOwnerCredentials函数不仅使用以下行构成票证:context.Validated(ticket); 但它也组成了一个cookie标识,并使用以下行将其设置为cookie:context.Request.Context.Authentication.SignIn(cookiesIdentity);
所以我的问题是,这个函数中cookie的确切目的是什么?AuthenticationTicket不应该足够用于身份验证吗?
Startup.cs
是一种初始化应用程序而不是Application_Start
Global.asax 的新方法,它很好.但是有没有地方放置我的拆解逻辑,例如:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_End()
{
// Release you ServiceBroker listener
SqlDependency.Stop(connString);
}
}
Run Code Online (Sandbox Code Playgroud)
在Microsoft.Owin命名空间中查找,但它似乎只有OwinStartupAttribute
.这是否意味着应用程序生命周期事件仍由System.Web.HttpApplication
实例处理,并且OWIN规范不支持?
在Katana(OWIN)实现中实现全局异常捕获器处理程序的正确方法是什么?
在作为Azure云服务(工作者角色)运行的自托管OWIN/Katana实现中,我将此代码放在中间件中:
throw new Exception("pooo");
Run Code Online (Sandbox Code Playgroud)
然后我将此代码放在Startup类Configuration方法中,在事件处理程序中设置断点:
AppDomain.CurrentDomain.UnhandledException +=
CurrentDomain_UnhandledExceptionEventHandler;
Run Code Online (Sandbox Code Playgroud)
和同一个类中的事件处理程序(在第一行设置断点):
private static void CurrentDomain_UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
{
var exception = (Exception)e.ExceptionObject;
Trace.WriteLine(exception.Message);
Trace.WriteLine(exception.StackTrace);
Trace.WriteLine(exception.InnerException.Message);
}
Run Code Online (Sandbox Code Playgroud)
代码运行时,不会触发断点.Visual Studio输出窗口确实包括此:
A first chance exception of type 'System.Exception' occurred in redacted.dll
A first chance exception of type 'System.Exception' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)
我也尝试将连接和处理程序移动到Worker Role OnStart方法,但仍然没有命中断点.
我根本没有使用WebAPI,但确实查看过那里做的帖子,但我没有发现任何明确的内容,所以我在这里.
在.NET Framework 4.5.2,VS 2013上运行.
所有想法都赞赏.谢谢.