使用Postman和JWT的JHipster身份验证

使用Postman和JWT的JHipster身份验证,jwt,jhipster,postman,Jwt,Jhipster,Postman,我一直在使用Postman in选项卡扩展来测试调用JHipster资源API的调用,发现它工作得很好(JHipster设置为使用OAuth2)。我使用JHipster登录页面进行了身份验证,然后打开了一个带有Postman扩展名的新选项卡 我刚刚将JHipster应用程序切换为使用JWT,这种使用Postman的方法不再有效,调用API时我的权限被拒绝。此外,Postman的in-tab扩展正在被弃用,取而代之的是独立应用程序 问题:是否有关于设置邮递员进行JHipster/JWT认证的文件

我一直在使用Postman in选项卡扩展来测试调用JHipster资源API的调用,发现它工作得很好(JHipster设置为使用OAuth2)。我使用JHipster登录页面进行了身份验证,然后打开了一个带有Postman扩展名的新选项卡

我刚刚将JHipster应用程序切换为使用JWT,这种使用Postman的方法不再有效,调用API时我的权限被拒绝。此外,Postman的in-tab扩展正在被弃用,取而代之的是独立应用程序


问题:是否有关于设置邮递员进行JHipster/JWT认证的文件

在JWT JHipster应用程序中使用Postman是可能的

  • 首先,使用JHipster应用程序进行身份验证
  • 检查
    授权
    标题的任何API请求。JWT令牌是“持有者”右侧的值。您还可以在浏览器的localStorage中的键
    jhi authenticationToken
    下找到此令牌
  • 编辑Postman中的标题并添加
    授权
    标题。该值应如下所示:

    Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJydRkZWxsIiwiYXV0aCI6IlJPTEVfQURNSU4sUk9MRV9U0VSIiwiZXhwIjoxNDgzOTg1MDkzfQ.1A13sBvr3KDWxJQpKDKOS33KAVjWIb3mS_qfxLBOCq_LbMwNHnysAai0SNXXgudMOulAnXYN9_Mzlcv1_zctA
    
  • 通过以下主体向
    /api/authenticate
    发出POST请求:
    {“密码”:“管理员”,“用户名”:“管理员”}
    。您将收到以下响应:
    {“id_令牌”:“aabbccddeeff”}
  • 使用在上一次呼叫中收到的令牌的值进行后续请求,并将其放入
    授权:Bearer aabbccddeeff
  • 您可以检查身份验证的状态,向
    /api/authenticate
    端点发出GET请求

  • 对我来说最简单的方法是

  • 使用管理员凭据登录Jhipster Web应用程序

  • 选择管理>API

  • 然后选择任何现有API并单击“试用”按钮

  • 它将列出带有令牌的
    curl
    操作,现在您可以获取令牌并在Postman中使用它

    如果您部署了单个微服务,并且希望单独测试它,您可以配置Postman使用预请求脚本构建JWT令牌

  • 转到JHipster生成的
    application-dev.yml
    文件,获取
    base64 secret
    值:
  • 安全性:
    身份验证:
    jwt:
    #此令牌必须使用Base64进行编码,长度至少为256位(您可以在命令行上键入“openssl rand-Base64”以生成512位的令牌)
    base64秘密:N2Y2MmFKNZG2ZTi4NtzizGewmtzhytazoTbHmJWmZKmZr2MZlZJJJZDA2MZQ0NGMXOGFLZTHJJHOWY0MJKZNGVGLoge3ZKxZKxZGi5ZTqxOy3MjewnwwwytuxTuxTuxOxy2U4WmZZJJjVHMJG0NtzKlHnzLHnWnWuYNzYYNzK5NzKXmi=
    
  • 将该值放入Postman环境中名为
    jhipster\u jwt\u secret的变量中

  • 配置预请求脚本():

  • 函数base64url(源代码){
    //用经典的base64编码
    encodedSource=CryptoJS.enc.Base64.stringify(源代码);
    //删除相等字符的填充
    encodedSource=encodedSource.replace(/=+$/,“”);
    //根据base64url规范替换字符
    encodedSource=encodedSource.replace(/\+/g,'-');
    encodedSource=encodedSource.replace(//\//g,'.'''.'替换);
    返回编码源;
    }
    变量头={
    “典型”:“JWT”,
    “alg”:“HS256”
    };
    var有效载荷={
    “sub”:“用户”,
    “身份验证”:“角色”
    };
    var secret=CryptoJS.enc.Base64.parse(postman.getEnvironmentVariable(“jhipster_jwt_secret”);
    //编码头
    var stringifiedHeader=CryptoJS.enc.Utf8.parse(JSON.stringify(header));
    var encodedHeader=base64url(stringifiedHeader);
    //编码数据
    var stringifiedPayload=CryptoJS.enc.Utf8.parse(JSON.stringify(payload));
    var encodedPayload=base64url(stringifiedPayload);
    //构建令牌
    var-token=encodedHeader+“+”encodedPayload;
    //签名令牌
    var signature=CryptoJS.HmacSHA256(令牌,秘密);
    签名=base64url(签名);
    var signedToken=token+“+”签名;
    postman.setEnvironmentVariable(“jwt_令牌”,signedToken);
    
  • 在授权选项卡内选择“承载令牌”,并在令牌输入字段中写入
    {{jwt_token}

  • 不幸的是,当我尝试使用默认的管理员证书时,我得到了一个错误403,它说,{“type”:“title”:“Unauthorized”,“status”:401,“detail”:“访问此资源需要完全身份验证”,“path”:“/api/authenticate”,“message”:“error.http.401”}For me返回成功(200)但是没有代币。这是有效的,但你知道吗,这是一种痛苦。在新登录后,必须为每个请求复制粘贴授权,这会降低一个请求的速度,并使一个请求失去快速迭代的能力。@geoidesic使用环境变量。然后你可以拥有你所有的API,比如Bearer{{token}。这正是我想要的,因为我有一个带有JWT身份验证的微服务。而且它工作得很好。非常感谢。这是一个很好的建议。非常感谢。但这里我必须从jhipster注册表配置中获取秘密。在没有jhipster注册表实例的情况下,如何开发微服务?