• cross server怎么取出自定义头部的Token


    cross server怎么取出自定义头部的Token

    客户端是这样发送post请求的
        with vHttp do
        begin      
          ContentType       := 'application/json';
          UserAgent         := 'Embarcadero URI Client/1.0';
          vHttp.CustomHeaders['Authorization'] := 'Bearer '+'aaaaaaaaaaaaabbbbbbbbbbbcccccccccc';//Access_Token;

    服务端这么取token:

    class function TNetCrossMiddleware.AuthenticateDigest(
      AAuthGetPasswordProc: TAuthGetPasswordProc; const ARealm: string): TCrossHttpRouterProc2;
    begin
      Result :=
        procedure(const ARequest: ICrossHttpRequest; const AResponse: ICrossHttpResponse; var AHandled: Boolean)
        var
          LUserName, LCorrectPassword: string;
          LNonce, LUserResponse, LCorrectResponse: string;
          LAuthStr: string;
          A1, A2, HA1, HA2: string;
          LAuthParams: TDelimitParams;
        begin
          // Authorization: Digest username="admin", realm="test realm", nonce="2468217498b46028705d401192459edd", uri="/login?key=value1", response="1d663058353e8f5831328728c29a6a1a", qop=auth, nc=00000006, cnonce="5d63a594e16feba2"
          LAuthStr := ARequest.Header['Authorization'];
          if (LAuthStr <> '') then
          begin
            if (LAuthStr.StartsWith('Digest')) then
              LAuthStr := LAuthStr.Substring(7)
            else
              LAuthStr := '';
          end;
    
          LCorrectPassword := #0;
          if (LAuthStr <> '') then
          begin
            LAuthParams := TDelimitParams.Create;
            try
              LAuthParams.Delimiter := ',';
              LAuthParams.Decode(LAuthStr);
    
              LUserName := LAuthParams['username'].Replace('"', '');
              // 获取用户名对应的正确密码
              if Assigned(AAuthGetPasswordProc) then
                AAuthGetPasswordProc(ARequest, LUserName, LCorrectPassword);
    
              {$region '计算摘要'}
              A1 := Format('%s:%s:%s', [LUserName, ARealm, LCorrectPassword]);
              A2 := Format('%s:%s', [ARequest.Method, LAuthParams['uri'].Replace('"', '')]);
    
              HA1 := TUtils.BytesToHex(THashMD5.GetHashBytes(A1));
              HA2 := TUtils.BytesToHex(THashMD5.GetHashBytes(A2));
    
              LCorrectResponse := HA1 +
                ':' + LAuthParams['nonce'].Replace('"', '') +
                ':' + LAuthParams['nc'].Replace('"', '') +
                ':' + LAuthParams['cnonce'].Replace('"', '') +
                ':auth' +
                ':' + HA2;
              LCorrectResponse := TUtils.BytesToHex(THashMD5.GetHashBytes(LCorrectResponse));
              {$endregion}
    
              // 客户端已计算好的摘要
              LUserResponse := LAuthParams['response'].Replace('"', '');
            finally
              FreeAndNil(LAuthParams);
            end;
          end;
    
          // 比对客户端与服务端的摘要是否匹配
          if (LAuthStr = '') or (LUserResponse <> LCorrectResponse) then
          begin
            AHandled := True;
            LNonce := TUtils.BytesToHex(THashMD5.GetHashBytes(DateTimeToStr(Now)));
            AResponse.Header['WWW-authenticate'] := Format(
              'Digest realm="%s", qop=auth, nonce="%s"',
              [ARealm, LNonce]);
            AResponse.SendStatus(401);
            Exit;
          end;
    
          AHandled := False;
        end;
    end; 
    

      

  • 相关阅读:
    Embedding技术在商业搜索与推荐场景的实践
    Elasticsearch 性能调优:段合并(Segment merge)
    elasticsearch关于index性能优化
    nginx优化图片防盗链
    NextCloud搭建
    nginx优化限制连接请求limit_req
    Android 去除标题栏和状态栏的方法
    Struts2 集合属性接收问题探讨
    解决JAVA调用mysqldump备份数据库时文件为空的问题
    Hibernate自定义字段查询 注意事项
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/13951970.html
Copyright © 2020-2023  润新知