我正在努力更好地解决公钥/私钥的工作方式.我知道发件人可以使用他/她的私钥向文档添加数字签名,以基本上获取文档的哈希值,但我不明白的是如何使用公钥来验证签名.
我的理解是公钥加密,私钥解密......任何人都可以帮我理解吗?
pki digital-signature public-key-encryption public-key private-key
我正在构建一个移动应用程序,并使用JWT进行身份验证.
看起来最好的方法是将JWT访问令牌与刷新令牌配对,这样我就可以根据需要随时使访问令牌过期.
我们有一个网站,登录和验证自己的网站的唯一方法是使用Facebook(这不是我的选择).第一次使用Facebook登录时,会自动为您创建一个帐户.
我们现在想为我们的网站创建一个iPhone应用程序,也为其他人创建一个公共API来使用我们的服务.
这个问题是关于如何通过app/API对我们的网站进行身份验证,并分为两部分:
从API到仅使用Facebook OAuth作为身份验证方法的网站处理REST身份验证的正确方法是什么?
我已经阅读并研究了很多关于REST API的标准身份验证方法.我们不能通过HTTPS使用Basic Auth等方法,因为没有用户凭证.像这样的东西似乎只是用于使用API验证应用程序.
目前,我认为最好的方法是在API上点击/授权终点,重定向到Facebook OAuth,然后重定向回站点并提供API的用户可以用来验证后续的"令牌"要求.
对于我们创建的官方应用程序,我们不一定需要以相同的方式使用公共API.那么与我们的网站交流并对用户进行身份验证的最佳方式是什么?
我理解(我认为)如何使用API(公共)密钥和秘密(私有)密钥验证使用我们的API的第三方应用程序.但是,当涉及到对正在使用该应用程序的用户进行身份验证时,我对如何进行此操作感到困惑,因为我们必须对用户进行身份验证的唯一方法是Facebook.
我觉得我错过了一些非常明显的东西,或者没有完全理解公共REST API应该如何工作,所以任何建议和帮助将不胜感激.
最近我开始使用基于JWT的身份验证.在用户登录之后,生成用户令牌,其看起来像"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ".
它由三个部分组成,每个部分用点(.)分隔.第一部分是Base64编码的标题.解码后我们会得到类似{"alg":"HS256",//使用的算法"typ":"JWT"}
第二部分是索赔和Base64编码.解码后,我们会得到类似{"sub":"1234567890","name":"John Doe","admin":true}
第三部分是签名并生成
HMACSHA256(base64UrlEncode(header)+"."+ base64UrlEncode(payload), secret base64编码 )
现在这个密钥是什么以及如何生成这个密钥?
我尝试了一些在线生成器,如" http://kjur.github.io/jsjws/tool_jwt.html ",但dint得到了很多帮助.
经过大量的搜索,我在这里问我的问题.我目前正在使用基于JSON Web Token的身份验证,在Angular JS app和Node.js Server(作为API)之间进行交互.
但是我有一个问题我自己无法回答:当您对JWT服务器端进行编码时,将用户作为有效负载进行编码,如何继续检索客户端的用户信息?这是一个了解我的问题的小例子:
我是基本用户,我将我的凭据发送到API进行身份验证.作为交换,我收到一个JWT令牌但我没有关于用户的任何信息,因为只有服务器具有能够解码JWT令牌的密钥.那么服务器是否需要向我发送例如用户的id以便我可以调用我的api用户/ id来检索有关用户身份验证的信息?
非常感谢你的帮助,如果答案很明显,那就很抱歉.晚上好.
我正在开发一个从文本(TTS)生成音频并为用户提供速度/音高控制的项目。
我的问题与请求安全有关。
用户在我的网站上注册时获得了 widget_id,他js在他的网站上放了一些,api 在他的网站上工作。当用户单击发送按钮时,api.js 文件也会向ajax POST我的站点发送包含widget_id数据的请求。然后在我这边,我得到了widget_id和引用者:
$referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : '';
我正在widget_id从我的数据库中获取与 相关的站点值,并将其与$referer.
...
if($website_url == $referer) {
$website_checked = true;
}
...
所以我的问题是:攻击者可以使用一些库(也许是 Curl)来改变 $_SERVER["HTTP_REFERER"]值,并破坏我的安全性吗?
例如,如果他使用 curl 和代码:
curl_setopt($ch, CURLOPT_REFERER, 'https://anysite.io/');
谢谢。
所以我更新了问题原因,因为我认为这是不可信的。那么请教Private认证算法的基本步骤...
更新 3:所以我开始赏金,因为我需要了解我的场景中的私有身份验证算法。
我正在尝试为谷歌我的业务创建一个平台,并且我已经实现了一键登录,并且我获得了凭据,但没有获得完整的信息。这是我尝试过的代码
\n <script>\n window.onload = function () {\n google.accounts.id.initialize({\n client_id: "clientid.apps.googleusercontent.com",\n callback: handleCredentialResponse,\n });\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log("opted out");\n }\n });\n function handleCredentialResponse(response) {\n console.log(response)\n // window.location = "https://github.com/";\n }\n };\n </script>\nRun Code Online (Sandbox Code Playgroud)\n这是我收到的回复
\n{\n clientId:\n "clientid.apps.googleusercontent.com",\n credential:\n "eyJhbGciOiJSUzI1NiIsImtpZCI6ImYwNTQxNWIxM2FjYjk1OT\xe2\x80\xa640Jk8v3LcOvtopFD_tI2HMlFjg0dK96XrqNiOD0H3Akl",\n select_by: "user",\n};\nRun Code Online (Sandbox Code Playgroud)\n 我在Express.js中有一个API,它将创建博客文章并将它们添加到我的数据库中.当我从DevTools内部的React应用程序发出请求时,它将显示我的JWT.我担心当我的网站上线时,人们可以看到我的令牌并从他们的网站发出请求以添加不需要的帖子.请告诉我发生了什么以及如何防止出现安全错误.
我正在使用JWT.要加密令牌,我在Java中使用HS512签名算法和base64EncodedSecretKey.获得令牌后,我能够在不知道密钥的情况下解密令牌.这怎么可能?我的令牌有什么问题吗?
String JWT = Jwts.builder()
.signWith(SignatureAlgorithm.HS512, SECRET)
.setSubject(username)
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATIONTIME))
.setAudience("ADMIN")
.compact();
Run Code Online (Sandbox Code Playgroud)
这JWT是我的令牌,我通过调用此方法设置密钥:
signWith(SignatureAlgorithm.HS512, SECRET)
Run Code Online (Sandbox Code Playgroud)
字符串SECRET是我的关键.
但是当我通过postman用正确的user_name和密码发出请求时,我在标题中收到了这个令牌:
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTUyMjkyMjAzOSwiYXVkIjoiQURNSU4ifQ.Wye52RTz8P3_7gPxZnJHOArA-ixaNHhQEcfoiAELu_56WXmMcZEAOlUyqP8yI0CWOZ4deXFRcP6azBpZpwNt-w
Run Code Online (Sandbox Code Playgroud)
当我解密它时,我可以查看令牌数据:
{
alg: "HS512"
}.
{
sub: "admin",
exp: 1522922039,
aud: "ADMIN"
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何在不知道我的密钥的情况下解密JWT?
最近在学习JWT。
我计划在 Next.js 服务器上采用 JWT,并使用发出 JWT 访问令牌的外部身份验证服务器。
起初我在考虑以下逻辑(当影响数据时)
但我认为这是非常低效的。
然后我看到一篇博客文章说:
“JWT 比其他基于令牌的身份验证解决方案更好,因为它不会向身份验证服务器发出进一步的验证请求,而是微服务本身验证令牌的有效性”
但是没有密钥就不可能验证 JWT 令牌吗?
如果是这样,在许多不同的微服务中存储 JWT 密钥是否安全?(我使用 dotenv 来存储密钥)
jwt ×6
security ×3
oauth-2.0 ×2
express ×1
facebook ×1
java ×1
javascript ×1
next.js ×1
openid ×1
php ×1
pki ×1
private ×1
private-key ×1
public-key ×1
rest ×1
websecurity ×1