使用 Thinktecture.IdentityModel lib 将 UseBasicAuthentication 与 Webapi 和 OWIN 结合使用 我的控制器中的身份没有声明
Using Thinktecture.IdentityModel lib using UseBasicAuthentication with Webapi and OWIN the Identity in my controllers has no claims
我正在使用 Thinktecture.IdentityModel 并尝试将 Owin.BasicAuthentication 库与带有 Webapi 和 OWIN 的 UseBasicAuthentication 一起使用。我的控制器中的身份没有声明并且显示未经过身份验证。
我在 Startup.Auth.cs
中设置了 owin 配置
app.SetDefaultSignInAsAuthenticationType("Basic");
//app.Use(typeof (BasicAuthentication), new[] {_container.Resolve<UserAccountService>()});
app.UseBasicAuthentication(new BasicAuthenticationOptions("realm", ValidationFunction)
{
AuthenticationType = "Basic",
AuthenticationMode = AuthenticationMode.Active
});
var oauthServerConfig = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
Provider = new MembershipRebootProvider(_container.Resolve<UserAccountService>()),
TokenEndpointPath = new PathString("/token")
};
app.UseOAuthAuthorizationServer(oauthServerConfig);
var oauthConfig = new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer"
};
app.UseOAuthBearerAuthentication(oauthConfig);
private static Task<IEnumerable<Claim>> ValidationFunction(string userName, string password)
{
IEnumerable<Claim> claims = null;
UserAccount user;
string tenant = "";
if (userName.Contains("\"))
{
var parts = userName.Split('\');
tenant = parts[0];
userName = parts[1];
}
else
{
throw new Exception("Cannot determine tenant and username.");
}
var userAccountService = _container.Resolve<UserAccountService>();
if (userAccountService.Authenticate(tenant, userName, password, out user))
{
claims = user.GetAllClaims();
}
return Task.FromResult(claims);
}
声明已按预期从成员重新启动返回。
但是当我在我的控制器方法中查看它时,没有声明并且它说未经过身份验证..
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
我错过了什么?
我确实在配置中抑制了 SuppressDefaultHostAuthentication,但是在检查这个时我注意到我没有 "Basic" 只有 Oauth BearerToken 的过滤器。我添加了它,现在可以使用了!
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Filters.Add(new HostAuthenticationFilter("Basic"));
我正在使用 Thinktecture.IdentityModel 并尝试将 Owin.BasicAuthentication 库与带有 Webapi 和 OWIN 的 UseBasicAuthentication 一起使用。我的控制器中的身份没有声明并且显示未经过身份验证。
我在 Startup.Auth.cs
中设置了 owin 配置 app.SetDefaultSignInAsAuthenticationType("Basic");
//app.Use(typeof (BasicAuthentication), new[] {_container.Resolve<UserAccountService>()});
app.UseBasicAuthentication(new BasicAuthenticationOptions("realm", ValidationFunction)
{
AuthenticationType = "Basic",
AuthenticationMode = AuthenticationMode.Active
});
var oauthServerConfig = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
Provider = new MembershipRebootProvider(_container.Resolve<UserAccountService>()),
TokenEndpointPath = new PathString("/token")
};
app.UseOAuthAuthorizationServer(oauthServerConfig);
var oauthConfig = new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer"
};
app.UseOAuthBearerAuthentication(oauthConfig);
private static Task<IEnumerable<Claim>> ValidationFunction(string userName, string password)
{
IEnumerable<Claim> claims = null;
UserAccount user;
string tenant = "";
if (userName.Contains("\"))
{
var parts = userName.Split('\');
tenant = parts[0];
userName = parts[1];
}
else
{
throw new Exception("Cannot determine tenant and username.");
}
var userAccountService = _container.Resolve<UserAccountService>();
if (userAccountService.Authenticate(tenant, userName, password, out user))
{
claims = user.GetAllClaims();
}
return Task.FromResult(claims);
}
声明已按预期从成员重新启动返回。
但是当我在我的控制器方法中查看它时,没有声明并且它说未经过身份验证..
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
我错过了什么?
我确实在配置中抑制了 SuppressDefaultHostAuthentication,但是在检查这个时我注意到我没有 "Basic" 只有 Oauth BearerToken 的过滤器。我添加了它,现在可以使用了!
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Filters.Add(new HostAuthenticationFilter("Basic"));