我最近开始研究新的ASP.Net Identity框架和Katana中间件,那里有大量的代码和文档,但我看到的是很多相互矛盾的信息,我想这是一个代码更新频率增加的结果.
我期待使用WsFederation认证与内部ADFS分2次服,但方式OWIN认证管道工程有我有点困惑,我希望有人能提供一些确切的信息.
具体来说,我感兴趣的是应该连接中间件的顺序以及在各种场景中需要哪些模块,我想摆脱任何不需要的东西,同时确保过程尽可能安全.
例如,它似乎UseWsFederationAuthentication
应该与之结合使用UseCookieAuthentication
,但我不确定正确的AuthenticationType
是什么(这篇帖子暗示它只是一个标识符字符串,但它的值是否显着?)或者即使我们仍然需要用SetDefaultSignInAsAuthenticationType
.
我还注意到Katana项目讨论板上的这个帖子,Tratcher在那里提到了一个常见的错误,但是对于哪部分代码出错是不是很具体.
就个人而言,我现在使用以下(使用自定义SAML令牌处理程序将令牌字符串读入有效的XML文档),它对我有用,但它是否最佳?
var appURI = ConfigurationManager.AppSettings["app:URI"];
var fedPassiveTokenEndpoint = ConfigurationManager.AppSettings["wsFederation:PassiveTokenEndpoint"];
var fedIssuerURI = ConfigurationManager.AppSettings["wsFederation:IssuerURI"];
var fedCertificateThumbprint = ConfigurationManager.AppSettings["wsFederation:CertificateThumbprint"];
var audienceRestriction = new AudienceRestriction(AudienceUriMode.Always);
audienceRestriction.AllowedAudienceUris.Add(new Uri(appURI));
var issuerRegistry = new ConfigurationBasedIssuerNameRegistry();
issuerRegistry.AddTrustedIssuer(fedCertificateThumbprint, fedIssuerURI);
app.UseCookieAuthentication(
new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType // "Federation"
}
);
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = appURI,
SignOutWreply = appURI,
Configuration = new WsFederationConfiguration
{
TokenEndpoint = fedPassiveTokenEndpoint …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在构建于OWIN中间件(使用Owin.Host.SystemWeb的IIS HOST)之上的ASP.NET Web API 2.1项目中创建统一的错误处理/报告.目前我使用了一个自定义异常记录器,它继承System.Web.Http.ExceptionHandling.ExceptionLogger
并使用NLog记录所有异常,如下面的代码所示:
public class NLogExceptionLogger : ExceptionLogger
{
private static readonly Logger Nlog = LogManager.GetCurrentClassLogger();
public override void Log(ExceptionLoggerContext context)
{
//Log using NLog
}
}
Run Code Online (Sandbox Code Playgroud)
我想将所有API异常的响应主体更改为友好的统一响应,该响应使用System.Web.Http.ExceptionHandling.ExceptionHandler
以下代码隐藏所有异常详细信息:
public class ContentNegotiatedExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
var errorDataModel = new ErrorDataModel
{
Message = "Internal server error occurred, error has been reported!",
Details = context.Exception.Message,
ErrorReference = context.Exception.Data["ErrorReference"] != null ? context.Exception.Data["ErrorReference"].ToString() : string.Empty,
DateTime = DateTime.UtcNow
};
var response …
Run Code Online (Sandbox Code Playgroud) asp.net-web-api owin katana asp.net-web-api2 owin-middleware
我的OWIN中间件是这样的.(Framework是ASP.NET Web API).
public class MyMiddleware : OwinMiddleware
{
public MyMiddleware(OwinMiddleware next) : base(next) { }
public override async Task Invoke(OwinRequest request, OwinResponse response)
{
var header = request.GetHeader("X-Whatever-Header");
await Next.Invoke(request, response);
response.SetHeader("X-MyResponse-Header", "Some Value");
response.StatusCode = 403;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
是推荐的做法来源于OwinMiddleware
?我看到在Katana源代码中,一些中间件类来自OwinMiddleware
,有些则不是.
我可以看到请求标头没问题.Next.Invoke
在我的中间件之后设置响应头或状态代码对返回给客户端的响应没有影响.但是,如果我在Next.Invoke
调用之前设置响应标头或状态,则带有标头的响应和我设置的状态将返回给客户端.设置这些的正确方法是什么?
微软最近推出了新的ASP.NET身份 - 替换旧的(简单)成员资格.不幸的是,我不能在我的旧项目中使用这个新的成员资格系统,因为它抛出System.InvalidOperationException:在上下文中找不到owin.Environment项.这是一个已知的错误,但微软对这个问题保持沉默.重现此错误的最简单方法 - 在VS 2013(使用Web Tools 2013 Preview Refresh)创建新的Web应用程序(MVC,WebForms或WebApi - 无关紧要),然后转到登录页面.它会工作.然后将应用程序中的命名空间更改为原始命名空间以外的任何内容,登录页面将抛出该错误 将名称空间更改回原始名称(您在创建项目时使用的名称空间)将解决此问题.
它看起来像.net存储某个与原始命名空间相关的东西,但是我找不到它在哪里和哪里,它不在项目文件夹中.我知道stackoverflow不是bug报告的地方,我只是希望有人已经找到了解决这个问题的方法,或者参与ASP.NET身份开发的人会看到这个.
我尝试将Swagger与Microsoft WebAPI 2 一起使用.
目前,我在一个方法中进行了以下调用.
appBuilder
.ConfigureOAuth()
.UseWebApi(configuration)
.UseWelcomePage();
Run Code Online (Sandbox Code Playgroud)
如果我想使用Swagger,我必须使用这个URL" https:// localhost:44300/swagger "哪一个非常好用.
我希望我的主页重定向到我的招摇的网址,也许如下,但这个示例不起作用.
appBuilder
...
.UseWelcomePage("/swagger");
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?
我在.NET MVC 5应用程序中工作.我不想使用Entity Framework.我想验证RavenDB数据库.在我看来,我想要替换UserManager
帐户控制器附带的.我想我可以重写所有UserManager函数来使用我的数据库,除了我不理解该ClaimsIdentity
对象.
在该SignInAsync
方法中,有一个调用UserManager.CreateIdentityAsync(...)
.我知道它会返回一个ClaimsIdentity
对象.我不知道的是如何自己创建一个ClaimsIdentity对象.
我看到它有4个属性Actor
,BootstrapContext
,Claims
和Label
.我不知道这些属性用于什么,我不知道如何正确生成它们.我认为正确生成它们非常重要,因为它是如何生成身份验证cookie的.
我在这里查看了ClaimsIdentity对象的解释,但这并没有真正帮助我理解.
如果我能看到代码CreateIdentityAsync()
,那可能会有所帮助.
如果我发现这一切都错了,请告诉我.否则,如果有人可以指出我如何生成ClaimsIdentity对象,那将会有所帮助.
ClaimsIdentity identity = new ClaimsIdentity
{
Actor = ????,
BootstrapContext = ?????,
Claims = ?????,
Label = ?????
}
Run Code Online (Sandbox Code Playgroud) authentication claims-based-identity ravendb katana asp.net-mvc-5
从OWIN迁移到ASP.NET Core时,我发现了一些有关迁移依赖性的信息,但是我没有找到有关这些其他主题的信息:
简而言之,为了从OWIN迁移到ASP.NET Core,很高兴知道需要我注意的主要热点是什么.
作为第一个例子 - ASP.NET Core似乎没有HttpConfiguration
.有无数的示例插件和服务假设它存在.我想推断如何将指令转换为HttpConfiguration
ASP.NET Core期望的任何方法.
另一个例子是,Swashbuckle文档提供了使用OWIN进行设置的说明,但这些说明不适用于ASP.NET Core.如果我理解与OWIN的主要区别,那么"猜测"如何将Swashbuckle安装到ASP.NET Core中会更容易.
self-hosted
应用说明.这让我感到困惑,因为我认为OWIN(相对于 Katana)已经是自我托管的,所以对我来说这听起来多余.但我不认为这与目前的问题有关.我的问题以Swashbuckle为例,但我并没有特别询问Swashbuckle.
我发现我正在寻找的大部分信息都在文章从Web API 2转换到ASP.NET MVC 6.
当我在asp.net webapi 2中设置OAuth授权服务器时,如何设置令牌端点以接受json而不是表单编码的帖子?
使用样本http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api
我试着发送application/json
{
"grant_type":"password",
"username":"Alice",
"password":"password123"
}
Run Code Online (Sandbox Code Playgroud)
我收到400 Bad Request的回复
{
"error" : "unsupported_grant_type"
}
Run Code Online (Sandbox Code Playgroud)
其中作为application/x-www-form-urlencoded的内容类型和grant_type=password&username=Alice&password=password123
正常工作的主体.
200好的
{
"access_token" : "08cQ33ZG728AqBcj1PBsRSs4iBPc02lLCZfpaRRWLx2mH_wpQzMwGDKS7r7VgJiKUjUFaq6Xv0uguINoiB_evVbVOtvyWaqAYvc0HRjlgrbj12uQqFbUB7bgH-jiyfhumkwuTSTVHfKUhBjCuD_pbyxEbu2K5WSJpUVge_SGxnb-htm4ZNf1qKDmpEnP9IpZVeJa-KnV0m0gEmP04slMW_JrO390LzCNvXZwVk1yMNuvDakk8tWX7Y6WkFoh7vtW6xfhw3QMbmnvS6px70yMWcTksRNG2bdmi4SenhuRTJx8IsCMnz-4Co7KiCNJGF7KLeU4WzE-LSqXv3mQ30CIQ7faXoMn53p83wZ1NoXYyhsNrQD4POUns_Isb_Pax5gvpZEdyo8zr1r7wb0dS7UXvJb0PWzLHc57Pg3u0kmcizQ",
"token_type" : "bearer",
"expires_in" : 1209599,
"userName" : "Alice",
".issued" : "Wed, 30 Oct 2013 15:16:33 GMT",
".expires" : "Wed, 13 Nov 2013 15:16:33 GMT"
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解Asp.net Web Api个人帐户身份验证和授权.我在网上看到了几个教程,包括这个.简而言之,当用户代理提供用户名和密码时,API会发出一个令牌,客户端将在后续API调用中使用该令牌来识别自身.用户代理通过发出请求来接收令牌,通常是:http://example.com/Token.该路径似乎在Startup类中设置,如下所示:
TokenEndpointPath = new PathString("/Token")
Run Code Online (Sandbox Code Playgroud)
我的问题是,我找不到任何匹配该路径的控制器方法.这是如何运作的?
ASP.NET身份验证现在基于OWIN中间件,可以在任何基于OWIN的主机上使用.ASP.NET Identity 对System.Web没有任何依赖性.
我有一个AuthorizeAttribute过滤器,我需要获取当前用户并添加一些属性以供操作控制器稍后检索.
问题是我必须使用属于System.Web的HttpContext.对于Owin有没有HttpContext的替代方案?
public class WebApiAuthorizeAttribute : AuthorizeAttribute
{
public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
base.OnAuthorization(actionContext);
Guid userId = new Guid(HttpContext.Current.User.Identity.GetUserId());
ApplicationUserManager manager = new ApplicationUserManager(new ApplicationUserStore(new ApplicationDbContext())) { PasswordHasher = new CustomPasswordHasher() };
ApplicationUser user = await manager.FindByIdAsync(userId);
actionContext.Request.Properties.Add("userId", user.LegacyUserId);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我发现这个问题,似乎是重复的,但要求为NancyFx项目工作的解决方案,这对我来说无效.