Asp.net 上下文中缺少owin
我试图从中使用Asp.net 上下文中缺少owin,asp.net,owin,thinktecture-ident-model,Asp.net,Owin,Thinktecture Ident Model,我试图从中使用ResourceAuthorize属性,但由于没有owin上下文,所有操作都停止了 我有一个owin启动类,用于设置授权管理器 [assembly: OwinStartup(typeof(My.WebApi.Startup))] namespace My.WebApi { public class Startup { public void Configuration(IAppBuilder app) {
ResourceAuthorize
属性,但由于没有owin上下文,所有操作都停止了
我有一个owin启动类,用于设置授权管理器
[assembly: OwinStartup(typeof(My.WebApi.Startup))]
namespace My.WebApi
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
AuthConfig.Configure(app);
}
}
}
public class AuthConfig
{
public static void Configure(IAppBuilder app)
{
app.UseResourceAuthorization(new ResourceAuthorizationMiddlewareOptions
{
Manager = GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(IResourceAuthorizationManager)) as IResourceAuthorizationManager
});
}
}
我知道它被检测和调用。但稍后,当从IdentityModel
点击以下代码时,我得到一个空指针异常:
public static Task<bool> CheckAccessAsync(this HttpRequestMessage request, IEnumerable<Claim> actions, IEnumerable<Claim> resources)
{
var authorizationContext = new ResourceAuthorizationContext(
request.GetOwinContext().Authentication.User ?? Principal.Anonymous,
actions,
resources);
return request.CheckAccessAsync(authorizationContext);
}
更新2:
在mvc控制器内部,上下文是可用的。但不是在webapi控制器中。一位队友找到了解决方案。他只是在owin启动类中添加了以下行:
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
然而,为什么这能解决这个问题是另一个谜。但是我们正在使用wsFederation,所以我想需要一些方法。但是如果我们不使用wsFed呢?我们还需要它来获取上下文吗?谁知道…您可以安全地删除global.asax文件,这样您的应用程序中就只有一个入口点。我不确定这是否会解决一些问题,但它肯定会让事情变得更干净……VS附带的web应用程序模板同时创建global.asax和startup类。有人说“留下来”是可以的,因为这样可以很容易地将事件与。。。我不确定移除它是否会对我有帮助,但我会尝试。
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);