我有一个庞大的文件,我必须逐行解析.速度至关重要.
一行示例:
Run Code Online (Sandbox Code Playgroud)Token-1 Here-is-the-Next-Token Last-Token-on-Line ^ ^ Current Position Position after GetToken
调用GetToken,返回"Here-is-the-Next-Token"并将CurrentPosition设置为令牌最后一个字符的位置,以便为下次调用GetToken做好准备.令牌由一个或多个空格分隔.
假设文件已经在内存中的StringList中.它很容易适合内存,比如200 MB.
我只担心解析的执行时间.什么代码将在Delphi(Pascal)中产生绝对最快的执行?
以下场景:我有一个使用Identity 2.0和Web API 2的MVC 5 Web应用程序.
一旦用户在MVC 5中进行身份验证,他应该能够调用WEB API端点,让我们调用它:api/getmydetails使用承载令牌.
我需要知道的是如何在MVC 5中为特定用户发出令牌?
我正在尝试为ReCaptcha V2生成安全令牌,如下所述:https: //developers.google.com/recaptcha/docs/secure_token
不幸的是,我生成的stoken无效,我无法找到一种方法来检查它为什么不起作用.有一个工作的Java示例(STokenUtils.java),但我发现自己无法将其转换为PHP.
public static function generateSecurityToken($secretKey){
$stoken = array(
'session_id' => session_id(),
'ts_ms' => round(microtime(true)*1000)
);
$secretKey = self::pkcs5_pad(hash('sha1', $secretKey), 16);
$stoken_json = json_encode($stoken);
$stoken_crypt = self::encrypt(self::pkcs5_pad($stoken_json, 16), $secretKey);
return $stoken_crypt;
}
public static function encrypt($sStr, $sKey) {
return base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
base64_decode($sKey),
$sStr,
MCRYPT_MODE_ECB
)
);
}
public static function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一个有效的PHP示例或指出我的代码中的任何明显错误吗?
我目前正在为具有 Web 和移动应用程序通用后端的新项目规划基础设施。移动应用程序通常由令牌授权,而不是 cookie,但我想知道为什么?我的想法很少,比如在设置和预加基于 cookie 的身份验证方面缺乏灵活性,但我想知道令牌背后的真正论点。
我试图理解token-based authentication这些日子,它声称是一种stateless authentication方法.我遇到了这个概念stateless web application.
以下是我读过的一些主题:
起初,我对这个想法感到非常兴奋.但越来越多的我觉得stateless是pseudo-proposition.
例如,假设我们使用客户端存储的令牌进行身份验证,我们如何对在线用户进行统计(假设没有日志)?我们应该将令牌存储在DB中吗?这不是说我们在服务器上存储状态信息吗?更重要的是,DB中的名称,年龄等普通用户信息也是某种状态信息吗?
我认为这里真正的问题不是让网络应用程序无状态,而是让网络应用程序正确处理状态信息,这样它就不会危及可伸缩性.
这取决于如何解释这个词stateless:
我更喜欢2,因为总会有一些inevitable global state(引自@ deceze对他的答案的评论).无论我们将状态信息存储为HTML 5 Web存储,HTTP标头,隐藏表单字段还是Cookie,状态仍然存在.只是它存储在服务器以外的其他地方.
我错过了什么好事吗?任何人都可以对此有所了解,这样我可以从这种心理斗争中解脱出来吗?
添加1
刚刚看了一下这本书的RESTful Web服务通过Leonard Richardson.在第4章的本节末尾Statelessness,它将状态分为Application State和Resource State.因此,我之前提到的普通用户信息和数据,如图像等,可以归类为Resource State.什么stateless指的是Application State.因此它不会破坏无状态代码存储resource state在服务器上.
但该书还提到了这样一种情况:an application key is used to restrict …
我在用
JwtBuilder builder = Jwts.builder()
.setId(user.getEmail())
.signWith(signatureAlgorithm, signingKey);
Run Code Online (Sandbox Code Playgroud)
然后创建一个令牌
Jwts.parser().setSigningKey(secret).parse(token);
Run Code Online (Sandbox Code Playgroud)
进行身份验证.当我在JUnit测试中运行它时,它工作正常.但是,当我通过REST调用验证作为标头传递的令牌时,身份验证因SignatureException而失败.我已经在HTTP调用的两端验证了令牌,并且令牌字符串是相同的.创建/认证的代码是静态的,因此,每一方的秘密都是相同的.任何线索
我正在构建一个 Angular WEB应用程序,它具有 Firebase 的云推送通知功能。我使用 AngularFireMessaging 服务(来自 Angular Fire 库)。首先,当应用程序启动时,我会检查用户是否已经授予权限并请求令牌,这可以使用 getToken() 方法轻松完成。这是我正在做的一个非常简短的例子:
import { AngularFireMessaging } from '@angular/fire/messaging';
@Injectable()
export class PushNotificationsService {
constructor(private afMessaging: AngularFireMessaging) {}
detectPermissionStatus(): Observable<string> {
return this.afMessaging.getToken().pipe(
map(token => { /*.... some code here....*/ })
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我已经授予权限并且令牌可用,则可观察对象会立即返回它,然后我会做任何我想做的事情。但是,如果我没有任何权限状态(例如,当我第一次访问该页面时),则会调用默认浏览器提示以允许/拒绝通知。这对我来说似乎很奇怪,因为我没有明确调用 requestPermission() 函数。似乎 getToken() 函数也以某种方式使浏览器调用提示。这是我并不真正想要的行为,因为它会阻止我的应用程序继续运行,因为我依赖于要返回的某些东西(无论它是现有令牌还是什么都没有)才能继续处理我需要的其余请求去做。
所以......简短的问题 - 有没有办法检查用户是否已经请求令牌而不调用提示?
编辑: 如果您想知道为什么我需要以这种方式执行这些操作 - 这是因为我想在发送登录请求之前检查用户是否有令牌以及是否存在令牌 - 我将令牌与登录一起发送要求。然后在后端,我只是检查该用户是否已经与此令牌相关联(使用同一浏览器的多个用户共享一个令牌可能会发生这种情况),如果是 - 他们对此订阅的最新决定是什么(他们是否选择了不在通知中)。我希望你已经明白了 - 如果出现提示窗口,应用程序只是挂起并等待做出某些决定,然后我们继续登录。
编辑: 我发现的另一个解决方案是使用内置于 Notification api 的浏览器。使用 Notification.permission 我可以看到权限的状态(默认、拒绝或授予)。如果它返回状态“已授予”,我知道我有一个令牌,我可以继续从 firebase 消息传递调用 getToken()。否则,我会直接跳到登录,稍后当用户决定订阅通知时,我将调用提示。
permissions token angularfire firebase-cloud-messaging angular
我使用 dgrijalva/jwt-go 和 lestrrat-go/jwx。我试图实现的是使用 jwks 验证 wso2 jwt。
令牌(过期令牌):
const tokenStr = `eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImI2TnozUDJwMHg1QWpfWENsUmhrVDFzNlNIQSJ9.eyJodHRwOlwvXC93c28yLm9yZ1wvY2xhaW1zXC9hcHBsaWNhdGlvbnRpZXIiOiJVbmxpbWl0ZWQiLCJodHRwOlwvXC93c28yLm9yZ1wvY2xhaW1zXC9rZXl0eXBlIjoiUFJPRFVDVElPTiIsImh0dHA6XC9cL3dzbzIub3JnXC9jbGFpbXNcL3ZlcnNpb24iOiIxLjAiLCJpc3MiOiJ3c28yLm9yZ1wvcHJvZHVjdHNcL2FtIiwiaHR0cDpcL1wvd3NvMi5vcmdcL2NsYWltc1wvYXBwbGljYXRpb25uYW1lIjoiVGFseW9uIiwiaHR0cDpcL1wvd3NvMi5vcmdcL2NsYWltc1wvZW5kdXNlciI6IkZEQkBjYXJib24uc3VwZXIiLCJodHRwOlwvXC93c28yLm9yZ1wvY2xhaW1zXC9lbmR1c2VyVGVuYW50SWQiOiItMTIzNCIsImh0dHA6XC9cL3dzbzIub3JnXC9jbGFpbXNcL3N1YnNjcmliZXIiOiJGREIiLCJodHRwOlwvXC93c28yLm9yZ1wvY2xhaW1zXC90aWVyIjoiR29sZCIsImh0dHA6XC9cL3dzbzIub3JnXC9jbGFpbXNcL2FwcGxpY2F0aW9uaWQiOiIxNDU2IiwiaHR0cDpcL1wvd3NvMi5vcmdcL2NsYWltc1wvdXNlcnR5cGUiOiJBUFBMSUNBVElPTiIsImV4cCI6MTU4OTQ2NjI0MSwiaHR0cDpcL1wvd3NvMi5vcmdcL2NsYWltc1wvYXBpY29udGV4dCI6IlwvY3VycmVudC1hY2NvdW50XC9jaGVxdWVzXC9hdXRvbWF0aWMtZGVwb3NpdHNcL2F0bVwvMS4wIn0=.K1iPtdXiuicuDPaLC6Exw/7UpJVW6Uy1tPpJlfZ29Vqs9M1zR00JpKxvymQMAzbD0GHlXPPsZmhDxOn0WMAPfr1Xi8tiruTLXNbwUPJ/SOovt+zK4JGtrydhc4iv2EROhMUk2uwJUb4DFjqKZRhBvtCW7fRtdtI9yJL4W4OK8Ld90yOb97usPjEPz8S4E4uNrb5lE2rLzIp+EaPwA232lDkhS8gGPIKdlLG1IdEfQ4cFU1VIplvWoHzprF9mGR0ahT2QGgmGE3AcBfkURk8VzIKDG/UcBA9eHu3XGg28j3OvIXWwJhd7Hi+jTqvggi0hplao8ElvjNBw/wNy2UO9WA==`
Run Code Online (Sandbox Code Playgroud)
jwks:
{"keys":[{"kty":"RSA","e":"AQAB","use":"sig","kid":"MjhhMDk2N2M2NGEwMzgzYjk2OTI3YzdmMGVhOGYxNjI2OTc5Y2Y2MQ","alg":"RS256","n":"zZU9xSgK77PbtkjJgD2Vmmv6_QNe8B54eyOV0k5K2UwuSnhv9RyRA3aL7gDN-qkANemHw3H_4Tc5SKIMltVIYdWlOMW_2m3gDBOODjc1bE-WXEWX6nQkLAOkoFrGW3bgW8TFxfuwgZVTlb6cYkSyiwc5ueFV2xNqo96Qf7nm5E7KZ2QDTkSlNMdW-jIVHMKjuEsy_gtYMaEYrwk5N7VoiYwePaF3I0_g4G2tIrKTLb8DvHApsN1h-s7jMCQFBrY4vCf3RBlYULr4Nz7u8G2NL_L9vURSCU2V2A8rYRkoZoZwk3a3AyJiqeC4T_1rmb8XdrgeFHB5bzXZ7EI0TObhlw"}]}
Run Code Online (Sandbox Code Playgroud)
那里看到的大多数示例都使用“kid”并且不相关,因为我的令牌标头没有它,它有“x5t”字段。
我还必须注意一件事,我的签名似乎是 base64 编码的,而不是 base64 url 编码的(它几乎扰乱了 Parse 方法的使用)。我尝试过使用 jwt.Parse() 我尝试过手动加密标头和有效负载 sha256 以及 RS256 和 base64 但没有显示成功。
我尝试过的事情:
const tokenString = `..`
func main() {
t, err := jwt.Parse(tokenStr, func(t *jwt.Token) (interface{}, error) {
return []byte("b6Nz3P2p0x5Aj_XClRhkT1s6SHA"), nil
})
}
Run Code Online (Sandbox Code Playgroud) token ×10
jwt ×2
angular ×1
angularfire ×1
architecture ×1
c ×1
cookies ×1
delphi ×1
encryption ×1
go ×1
http ×1
java ×1
jwt-go ×1
oauth-2.0 ×1
parsing ×1
pascal ×1
permissions ×1
php ×1
recaptcha ×1
security ×1
session ×1
stateless ×1
todo ×1
validation ×1
web ×1