Asp.net mvc 在ServiceStack服务上进行身份验证后访问客户端上的AuthSession
我对会话文档有点困惑,所以假设我已经从客户端发送了身份验证数据,并检索了ss id和ss pid,如下所示:Asp.net mvc 在ServiceStack服务上进行身份验证后访问客户端上的AuthSession,asp.net-mvc,authentication,servicestack,Asp.net Mvc,Authentication,servicestack,我对会话文档有点困惑,所以假设我已经从客户端发送了身份验证数据,并检索了ss id和ss pid,如下所示: var client = new JsonServiceClient("http://somewhere/theAPI/"); var response = client.Post(new Auth() {UserName = "myuser", Password = "password123"}); var myCookie= client.CookieContainer.GetCoo
var client = new JsonServiceClient("http://somewhere/theAPI/");
var response = client.Post(new Auth() {UserName = "myuser", Password = "password123"});
var myCookie= client.CookieContainer.GetCookies(new Uri("http://somewhere/theAPI"));
如何从servicestack检索AuthSession信息,如姓氏、电子邮件等?我是否需要将它存储在其他地方,比如memcache服务器中,然后从中检索
或者我需要在客户端构建身份验证?只需使用API检索数据?假设您已经创建了自定义AuthUserSession,例如:
/// <summary>
/// Create your own strong-typed Custom AuthUserSession where you can add additional AuthUserSession
/// fields required for your application. The base class is automatically populated with
/// User Data as and when they authenticate with your application.
/// </summary>
public class CustomUserSession : AuthUserSession {
public string CustomId { get; set; }
}
然后,您可以在创建的服务中将此数据公开给客户端。将其用作模型来创建UserAuth服务,该服务仅返回当前用户的信息
public abstract class AppServiceBase : Service {
private CustomUserSession userSession;
protected CustomUserSession UserSession {
get {
return base.SessionAs<CustomUserSession>();
}
}
}
[Route("/userauths")]
public class UserAuths
{
public int[] Ids { get; set; }
}
public class UserAuthsResponse
{
public UserAuthsResponse()
{
this.Users = new List<User>();
this.UserAuths = new List<UserAuth>();
this.OAuthProviders = new List<UserOAuthProvider>();
}
public CustomUserSession UserSession { get; set; }
public List<User> Users { get; set; }
public List<UserAuth> UserAuths { get; set; }
public List<UserOAuthProvider> OAuthProviders { get; set; }
}
//Implementation. Can be called via any endpoint or format, see: http://servicestack.net/ServiceStack.Hello/
public class UserAuthsService : AppServiceBase
{
public object Any(UserAuths request)
{
var response = new UserAuthsResponse {
UserSession = base.UserSession,
Users = Db.Select<User>(),
UserAuths = Db.Select<UserAuth>(),
OAuthProviders = Db.Select<UserOAuthProvider>(),
};
response.UserAuths.ForEach(x => x.PasswordHash = "[Redacted]");
response.OAuthProviders.ForEach(x =>
x.AccessToken = x.AccessTokenSecret = x.RequestTokenSecret = "[Redacted]");
if (response.UserSession != null)
response.UserSession.ProviderOAuthAccess.ForEach(x =>
x.AccessToken = x.AccessTokenSecret = x.RequestTokenSecret = "[Redacted]");
return response;
}
}
公共抽象类AppServiceBase:Service{
私有CustomUserSession用户会话;
受保护的CustomUserSession用户会话{
得到{
返回base.SessionAs();
}
}
}
[路由(“/userauths”)]
公共类用户身份验证
{
公共int[]Ids{get;set;}
}
公共类UserAuthsResponse
{
公共用户身份验证响应()
{
this.Users=新列表();
this.UserAuths=新列表();
this.OAuthProviders=新列表();
}
公共CustomUserSession用户会话{get;set;}
公共列表用户{get;set;}
公共列表UserAuths{get;set;}
公共列表OAuthProviders{get;set;}
}
//实施。可以通过任何端点或格式调用,请参见:http://servicestack.net/ServiceStack.Hello/
公共类UserAuthsService:AppServiceBase
{
任何公共对象(UserAuths请求)
{
var response=newuserauthsresponse{
UserSession=base.UserSession,
Users=Db.Select(),
UserAuths=Db.Select(),
OAuthProviders=Db.Select(),
};
response.UserAuths.ForEach(x=>x.PasswordHash=“[redact]”);
response.OAuthProviders.ForEach(x=>
x、 AccessToken=x.AccessTokenSecret=x.RequestTokenSecret=“[Redacted]”;
if(response.UserSession!=null)
response.UserSession.ProviderOAuthAccess.ForEach(x=>
x、 AccessToken=x.AccessTokenSecret=x.RequestTokenSecret=“[Redacted]”;
返回响应;
}
}
Hi,因此,在使用CredentialAuthProvider进行身份验证后,客户端需要发送请求,从(/userauths)检索登录信息。会话支持仅限于服务器端,开箱即用。
public abstract class AppServiceBase : Service {
private CustomUserSession userSession;
protected CustomUserSession UserSession {
get {
return base.SessionAs<CustomUserSession>();
}
}
}
[Route("/userauths")]
public class UserAuths
{
public int[] Ids { get; set; }
}
public class UserAuthsResponse
{
public UserAuthsResponse()
{
this.Users = new List<User>();
this.UserAuths = new List<UserAuth>();
this.OAuthProviders = new List<UserOAuthProvider>();
}
public CustomUserSession UserSession { get; set; }
public List<User> Users { get; set; }
public List<UserAuth> UserAuths { get; set; }
public List<UserOAuthProvider> OAuthProviders { get; set; }
}
//Implementation. Can be called via any endpoint or format, see: http://servicestack.net/ServiceStack.Hello/
public class UserAuthsService : AppServiceBase
{
public object Any(UserAuths request)
{
var response = new UserAuthsResponse {
UserSession = base.UserSession,
Users = Db.Select<User>(),
UserAuths = Db.Select<UserAuth>(),
OAuthProviders = Db.Select<UserOAuthProvider>(),
};
response.UserAuths.ForEach(x => x.PasswordHash = "[Redacted]");
response.OAuthProviders.ForEach(x =>
x.AccessToken = x.AccessTokenSecret = x.RequestTokenSecret = "[Redacted]");
if (response.UserSession != null)
response.UserSession.ProviderOAuthAccess.ForEach(x =>
x.AccessToken = x.AccessTokenSecret = x.RequestTokenSecret = "[Redacted]");
return response;
}
}