A.A*_*ram 8 cookies asp.net-web-api angularjs owin bearer-token
我的Web应用程序中有两个主要项目:
Web项目按预期工作(身份验证和授权正在运行)
方法:将令牌存储到localstorage,并使用拦截器发送每个请求.
现在我想为WebApi项目添加身份验证和授权,该项目将为Hangfire,Elmah和Help页面等其他模块提供服务.我添加了相同的登录逻辑,它工作(授权),然后重定向到Dashboard页面(使用Angularjs),它工作.
但是去任何其他页面(其中一个提到的模块)都不起作用.不工作:来自Owin上下文的用户总是为空/空.(参见代码)
根据我的理解,我需要以某种方式发送令牌,其中每个请求都不会发生.
问题:
我怎样才能实现这一点(发送/获取令牌)?
如果cookie是唯一/更好的方法↴
如何为项目1和项目2的令牌集成?(尝试使用cookie,但似乎我做错了,或者它与承载令牌同时工作?)
码:
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = new SimpleAuthorizationServerProvider(),
RefreshTokenProvider = new SimpleRefreshTokenProvider()
};
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
GlobalConfiguration.Configure(WebApiConfig.Register);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
AreaRegistration.RegisterAllAreas();
app.UseHangfire(hangfireConfig =>
{
config.UseAuthorizationFilters(
new AuthorizationFilter { Users = "admin, superuser", Roles = "advanced" },
new ClaimsBasedAuthorizationFilter("name", "value")
);
hangfireConfig.UseSqlServerStorage("Context");
hangfireConfig.UseServer();
});
}
Run Code Online (Sandbox Code Playgroud)
我试过测试目的:
public class HFAuthorizationFilter : Hangfire.Dashboard.IAuthorizationFilter
{
public bool Authorize(IDictionary<string, object> owinEnvironment)
{
var context = new OwinContext(owinEnvironment);
if (context.Authentication.User == null)
return false;//Always null
return context.Authentication.User.HasClaim(ClaimTypes.Role, "SuperAdmin")
|| context.Authentication.User.HasClaim(ClaimTypes.Role, "Admin");
}
}
Run Code Online (Sandbox Code Playgroud)
在配置中:
app.UseHangfire(hangfireConfig =>
{
hangfireConfig.UseAuthorizationFilters(
new HFAuthorizationFilter()
);
hangfireConfig.UseSqlServerStorage("Context");
hangfireConfig.UseServer();
});
Run Code Online (Sandbox Code Playgroud)
小智 0
如果我理解正确的话,您希望在一个 api 中实现令牌生成,并在其他 api 中使用相同的令牌。如果是这种情况,那么您需要主 api 作为令牌生成器,并需要子或依赖 api 来使用令牌。请查找 oauth 主 API 配置的主 API 和子 API 配置:
public void ConfigureOAuth(IAppBuilder app)
{
//configure OAuth using owin framework
var oAuthOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromHours(2),
Provider = new KatanaAuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(oAuthOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
Run Code Online (Sandbox Code Playgroud)
子API配置:
public void ConfigureAuth(IAppBuilder app)
{
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
987 次 |
最近记录: |