iOS初学者在这里.我有以下代码:
[facebook authorize:nil delegate:self];
NSString *string1=[facebook accessToken];
NSLog(string1);
Run Code Online (Sandbox Code Playgroud)
日志显示: miFOG1WS_7DL88g6d95Uxmzz7GCShsWx_FHuvZkmW0E.eyJpdiI6IjNZZkFBY1c5ZnBaMGEzOWM2RzNKbEEifQ.LNjl06lsOQCO9ArVARqff3Ur2XQHku3CMHDBKkpGg351EB33LGxVv96Hh5R860KDJL0cLq8QezSW0GovYxnhUucOwxlITV364sVKDXIzC3bAn9P_74r2Axl1SgOaTyMMkQ_aSQ2OWh-8d3Zn9BDt3pXVWzBLJ9I4XAosnw0GjuE
这似乎太长,不能成为访问令牌.我读过它应该只有40个字符.我究竟做错了什么?
我从我的API获得一个JWT编码的访问令牌作为响应.但我无法解码它并以JSON格式获取它.我尝试使用angular2-jwt库,但它没有用.我正在编写下面的代码:
setXAuthorizationToken(client){
let requestHeader = new Headers();
requestHeader.append('Content-Type', 'application/x-www-form-urlencoded');
this.http.post(client.clientURL + "oauth/token", 'grant_type=password&client_id=toto&client_secret=sec&' + 'username=' + client.username
+ '&password=' + client.password, {
headers: requestHeader
}).map(res=>res.json())
.subscribe((token) =>{
if(!token.access_token){
return;
}
else{
var decompressToken = LZString.decompressFromEncodedURIComponent(token.access_token);
console.log(decompressToken);
}
});
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
我有一个与YouTube直播API集成的程序.它运行在计时器上,因此我可以通过刷新令牌每隔50分钟编程一次获取新的访问令牌.我的问题是,为什么?
当我通过YouTube验证时,它给了我一个刷新令牌.然后,我使用此刷新令牌大约每小时获取一个新的访问令牌.如果我有刷新令牌,我总是可以使用它来获得一个新的访问令牌,因为它永远不会过期.所以我不知道这是多么安全,而不仅仅是从一开始就给我一个访问令牌,而不是整个刷新令牌系统.
在GitHub中生成个人访问令牌后,是否有必要将其存储在本地的某个位置?
如果是,是否有任何可以存储的首选方式?
在过去的 6 个月中,我一直在使用 Azure DevOps 中的管道进行发布,但今天我收到以下错误:
2019-09-25T14:24:38.4296875Z ##[section]Starting: Azure App Service Deploy: AS-ServiciosNegocio-API-UAT
2019-09-25T14:24:38.4419797Z ==============================================================================
2019-09-25T14:24:38.4419900Z Task : Azure App Service deploy
2019-09-25T14:24:38.4419986Z Description : Deploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby
2019-09-25T14:24:38.4420053Z Version : 3.4.31
2019-09-25T14:24:38.4420117Z Author : Microsoft Corporation
2019-09-25T14:24:38.4420182Z Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-rm-web-app-deployment
2019-09-25T14:24:38.4420291Z ==============================================================================
2019-09-25T14:24:39.1630446Z Got connection details for Azure App Service:'AS-ServiciosNegocio-API-UAT'
2019-09-25T14:24:39.3091141Z ##[error]Error: Failed to get resource ID for resource type …Run Code Online (Sandbox Code Playgroud) deployment access-token azure-web-app-service azure-devops azure-pipelines-release-pipeline
我已经读了一段时间了,没有任何意义,而且解释相互矛盾,评论证明了这一点。
到目前为止,我的理解是 JWT 存储由服务器编码的信息,可以有过期时间,并且服务器及其密钥可以解码其中的信息(如果它有效)。说得通。
它对于可扩展性很有用,因此独立的 API 可以解码并验证令牌中的信息,只要它们拥有密钥。此外,不需要将信息存储在任何数据库中,这与会话不同。说得通。
如果令牌被盗,API 无法判断令牌是否由正确的人使用。这是上面的缺点。
通过减少令牌的过期时间,可以减少安全漏洞,从而减少窃贼未经许可使用令牌的时间。(附带问题,但如果他们能够偷一次,他们可能也会偷第二次)
但是减少令牌的有效时间意味着每次令牌过期时用户都需要登录,并且如上所述,这种情况相当频繁,因此不会提供太好的用户体验。说得通。
从现在开始,一切都没有意义了:
引入刷新令牌可以解决这个问题,因为它的过期时间更长。使用刷新令牌可以生成访问令牌,因此只要用户拥有刷新令牌(时间较长)就可以登录,而被盗的访问令牌仍然仅在短时间内有效。
对我来说,上述内容似乎增加了一层额外的复杂性,而安全性没有任何改进。即对我来说,上面的内容似乎等于一个长期存在的访问令牌。
为什么?因为对我来说,刷新令牌基本上是一个访问令牌(因为这就是它生成的)。因此,拥有刷新令牌意味着无限制的访问令牌,因此无限制地访问 API。
然后我读到一个答案,刷新令牌和访问令牌是一对一的映射,因此窃取访问令牌仍然意味着对 API 的未经授权的访问,但只持续很短的时间,并且窃取刷新令牌将生成不同的访问令牌,以便 API 可以检测到异常(同一帐户使用不同的访问令牌),从而使访问令牌失效。
看来我不是唯一一个对这个问题感到困惑的人。
如果上述情况不正确,刷新令牌有何真正帮助?
如果上述情况成立,并且确实存在刷新令牌和访问令牌的一对一映射:
如果有人能澄清这个问题那就太好了,因为从 5 个解释中,有 5 个相互冲突的陈述(有时相同的解释包含冲突的信息),并且许多开发人员都想了解这种方法。
我正在学习OAuth,我有一个问题,我无法找到一个anwser ..
我理解请求令牌授权或不授权应用程序使用API.但是一旦用户获得了访问令牌,如果有人窃取了他的访问令牌会发生什么?
想象一下,我们有像http://www.example.com/api/article/1?access_token=******access_token******
如果我将此URL提供给其他用户,则另一个用户可以访问,因此API不再受保护了吗?
$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code;
Run Code Online (Sandbox Code Playgroud)
什么应该是redirect_uri?我试过用这个
'https://graph.facebook.com/oauth/authorize?client_id='.$app_id.'&
redirect_uri='.urlencode($canvas_page).'&scope=email,read_stream,publish_stream';
Run Code Online (Sandbox Code Playgroud)
但它返回时出现此错误
{
"error": {
"message": "Error validating verification code.",
"type": "OAuthException"
}
}
Run Code Online (Sandbox Code Playgroud)
需要帮助,提前致谢.
这里接受的答案是为什么OAuth2访问令牌到期:
假设我们不支持访问令牌的非加密传输,则需要处理第一个项目符号.
假设我们可以对可撤销的数据库进行查找,完全随机的访问令牌负责第二个.
对于移动应用程序,客户端身份验证不能更强,因为"在注册期间获取的client_id和client_secret都嵌入在应用程序的源代码中.在这种情况下,client_secret显然不被视为机密." (谷歌).这消除了第三个问题.
那么在这种情况下分离短期访问令牌和长期刷新令牌有什么好处呢?仅发出非过期访问令牌并忽略整个刷新令牌部分是"可以的"吗?
我正在尝试对Sharepoint进行身份验证,以便我可以将文件上传到特定的Sharepoint站点.
我正在尝试使用X.509证书来检索访问令牌,但我一直在(401):未经授权.
这是我尝试使用证书检索访问令牌的方式:
string authority = SettingsHelper.Authority;
string clientID = SettingsHelper.ClientId;
string serverName = SettingsHelper.SharepointServerName;
//Retreive the certificate path
string certFile = Server.MapPath(SettingsHelper.CertificatePath);
string certPassword = SettingsHelper.CertificatePassword;
AuthenticationResult authenticationResult = null;
AuthenticationContext authenticationContext = new AuthenticationContext(authority);
//Create the certificate file, using the path (certFile), password (certPassword) and the MachineKeySet
X509Certificate2 cert = new X509Certificate2(certFile, certPassword, X509KeyStorageFlags.MachineKeySet);
//Create the ClientAssertionCertificate using the clientID and the actual certificate
ClientAssertionCertificate cac = new ClientAssertionCertificate(clientID, cert);
//Retreive the access token using the serverName and …Run Code Online (Sandbox Code Playgroud) access-token ×10
oauth ×4
security ×3
facebook ×2
jwt ×2
angular ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
c# ×1
decode ×1
deployment ×1
git ×1
github ×1
iphone ×1
oauth-2.0 ×1
office365 ×1
sharepoint ×1
youtube-api ×1