如何使用令牌获取有关用户的信息

Posted

技术标签:

【中文标题】如何使用令牌获取有关用户的信息【英文标题】:How can I get information about the user using a token 【发布时间】:2016-09-12 16:20:22 【问题描述】:

需要使用令牌接收用户数据。你好。需要使用令牌接收用户数据。我有一个 web api + websockets,通过 web 浏览器连接 websockets。

var webSocket = new WebSocket(handlerUrl);
//Open connection  handler.
webSocket.onopen = function () 
   webSocket.send("\"type\":\"LOGIN\",\"access_token\":\"Bearer HIDDEN\"");
;

一旦连接,我立即发送令牌。 在服务器端,它看起来如下:

 public class SocketClientController: ApiController
 
     public HttpResponseMessage Get ()
     
        HttpContext.Current.AcceptWebSocketRequest (new WebSocketHandler ());
        return Request.CreateResponse (HttpStatusCode.SwitchingProtocols);
     
 <miss>

套接字类:

    <miss>
     private void Login(string access_token)
     
// here i want get user info
     

     public override void OnMessage(string input)
     
           dynamic data = JObject.Parse(input);

           switch ((string)data.type)
           
              case "LOGIN":
                Login((string)data.access_token);
              break;
           
     

我使用身份,当您第一次从客户端收到适合我的数据时,带有令牌的变体。告诉我如何在不通过登录名和密码的情况下获取用户输入,并使用 [Authorize]。

对不起我的英语。

【问题讨论】:

令牌保存在哪里?您必须保存令牌(如会话数据)以验证您从用户(登录)获得的令牌 @rbr94 感谢您的回答!不是很明白,在Session中维护一个token是不是问题,因为有可能只获取一个token的用户名? 你的意思是把用户名和令牌结合起来,即它们之间有某种联系? 【参考方案1】:

我决定了我的任务!下面是代码:

  public class MachineKeyProtector : Microsoft.Owin.Security.DataProtection.IDataProtector
        
            private readonly string[] _purpose =
            
                    typeof(OAuthAuthorizationServerMiddleware).Namespace,
                    "Access_Token",
                    "v1"
                ;

            public byte[] Protect(byte[] userData)
            
                throw new NotImplementedException();
            

            public byte[] Unprotect(byte[] protectedData)
            
                return System.Web.Security.MachineKey.Unprotect(protectedData, _purpose);
            
        

用途:

 var secureDataFormat = new TicketDataFormat(new Providers.MachineKeyProtector());
 AuthenticationTicket ticket = secureDataFormat.Unprotect(access_token);
 var userId = ticket.Identity.GetUserId();

【讨论】:

以上是关于如何使用令牌获取有关用户的信息的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 从安全令牌中获取信息

如何使用谷歌访问令牌获取用户信息

python 有关如何将Flask与requests-oauthlib一起使用以使用OAuth 2令牌获取GitHub用户配置文件的示例。

python 有关如何将Flask与requests-oauthlib一起使用以使用OAuth 2令牌获取GitHub用户配置文件的示例。

如何防止客户端在.net 中使用其他 jwt 令牌?

OOAuthException:必须使用活动访问令牌来查询有关当前用户的信息