@jjlmoya/utils-developer 1.15.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +3 -1
- package/src/entries.ts +7 -1
- package/src/index.ts +4 -0
- package/src/tests/locale_completeness.test.ts +2 -3
- package/src/tests/pagespeed_best_practices.test.ts +198 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/aspectRatio/component.astro +3 -1
- package/src/tool/colorConverter/component.astro +3 -3
- package/src/tool/jwtDecoder/bibliography.astro +14 -0
- package/src/tool/jwtDecoder/bibliography.ts +12 -0
- package/src/tool/jwtDecoder/component.astro +209 -0
- package/src/tool/jwtDecoder/entry.ts +30 -0
- package/src/tool/jwtDecoder/i18n/de.ts +248 -0
- package/src/tool/jwtDecoder/i18n/en.ts +247 -0
- package/src/tool/jwtDecoder/i18n/es.ts +248 -0
- package/src/tool/jwtDecoder/i18n/fr.ts +248 -0
- package/src/tool/jwtDecoder/i18n/id.ts +248 -0
- package/src/tool/jwtDecoder/i18n/it.ts +248 -0
- package/src/tool/jwtDecoder/i18n/ja.ts +248 -0
- package/src/tool/jwtDecoder/i18n/ko.ts +248 -0
- package/src/tool/jwtDecoder/i18n/nl.ts +247 -0
- package/src/tool/jwtDecoder/i18n/pl.ts +247 -0
- package/src/tool/jwtDecoder/i18n/pt.ts +247 -0
- package/src/tool/jwtDecoder/i18n/ru.ts +248 -0
- package/src/tool/jwtDecoder/i18n/sv.ts +248 -0
- package/src/tool/jwtDecoder/i18n/tr.ts +248 -0
- package/src/tool/jwtDecoder/i18n/zh.ts +248 -0
- package/src/tool/jwtDecoder/index.ts +11 -0
- package/src/tool/jwtDecoder/jwt-decoder-parser-and-claims-inspector.css +358 -0
- package/src/tool/jwtDecoder/logic.ts +96 -0
- package/src/tool/jwtDecoder/seo.astro +15 -0
- package/src/tool/jwtDecoder/ui.ts +38 -0
- package/src/tool/llmCostCalculator/component.astro +1 -2
- package/src/tool/mobileMockupGenerator/component.astro +4 -5
- package/src/tool/placeholderGenerator/component.astro +2 -2
- package/src/tool/readabilityCalculator/component.astro +4 -4
- package/src/tool/serpPixelSimulator/bibliography.astro +14 -0
- package/src/tool/serpPixelSimulator/bibliography.ts +16 -0
- package/src/tool/serpPixelSimulator/component.astro +84 -0
- package/src/tool/serpPixelSimulator/controller.ts +323 -0
- package/src/tool/serpPixelSimulator/entry.ts +30 -0
- package/src/tool/serpPixelSimulator/i18n/de.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/en.ts +213 -0
- package/src/tool/serpPixelSimulator/i18n/es.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/fr.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/id.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/it.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/ja.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/ko.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/nl.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/pl.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/pt.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/ru.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/sv.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/tr.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/zh.ts +214 -0
- package/src/tool/serpPixelSimulator/index.ts +8 -0
- package/src/tool/serpPixelSimulator/logic.ts +18 -0
- package/src/tool/serpPixelSimulator/seo.astro +15 -0
- package/src/tool/serpPixelSimulator/serp-pixel-simulator.css +335 -0
- package/src/tool/serpPixelSimulator/ui.ts +33 -0
- package/src/tools.ts +3 -2
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { JwtDecoderUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'jwt-dekoder-tolk-och-anspraksinspektor';
|
|
7
|
+
const title = 'JWT Avkodare, Tolk och Anspraksinspektor';
|
|
8
|
+
const description = 'Klistra in en JSON Web Token, avkoda dess header och payload direkt, inspektera registrerade claims, upptack utgångna tokens och kopiera ren JSON for att felsoka autentiseringsfloden.';
|
|
9
|
+
|
|
10
|
+
const howTo = [
|
|
11
|
+
{
|
|
12
|
+
name: 'Klistra in JWTn',
|
|
13
|
+
text: 'Kopiera en token från en Authorization header, cookie, loggpost eller identitetsleverantor och klistra in den i inmatningsfaltet.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'Las den avkodade headern och payloaden',
|
|
17
|
+
text: 'Verktyget delar upp token i header, payload och signatur och visar sedan JSON segmenten i separata paneler for snabb inspektion.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'Kontrollera viktiga claims',
|
|
21
|
+
text: 'Granska algoritm, utfordare, publik, amne, utfardandetid, giltigt från tid och utgångstid utan att manuellt konvertera Unix tidsstamplar.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'Kopiera den data du behover',
|
|
25
|
+
text: 'Kopiera ett avkodat avsnitt eller hela den avkodade utmatningen nar du behover dela en sanerad felsokningsogonblicksbild med ditt team.',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const faq = [
|
|
30
|
+
{
|
|
31
|
+
question: 'Bevisar avkodning av en JWT att tokenen ar giltig?',
|
|
32
|
+
answer: 'Nej. Avkodning visar bara den base64url kodade headern och payloaden. En token ar trovordig forst nar signaturen, utfordaren, publiken, utgångstiden och relaterade claims har validerats av applikationen eller identitetsleverantoren.',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
question: 'Kan jag anvanda denna JWT avkodare for access tokens och ID tokens?',
|
|
36
|
+
answer: 'Ja. Avkodaren ar anvandbar for att inspektera OAuth access tokens, OpenID Connect ID tokens, sessionstokens och tjanst till tjanst tokens, sa lange de anvander det standardiserade tredelade JWT formatet.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
question: 'Varfor verifierar inte signaturpanelen tokenet?',
|
|
40
|
+
answer: 'JWT verifiering kraver ratt hemlighet, publik nyckel eller JWKS konfiguration. Detta verktyg fokuserar avsiktligt på avkodning och inspektion så att utvecklare kan se tokeninnehållet utan att låtsas att en synlig signaturstrang ar bevis på giltighet.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: 'Vad bor jag kontrollera forst nar jag felsoker en JWT?',
|
|
44
|
+
answer: 'Borja med exp, nbf, iss, aud och alg. De flesta verkliga produktionsproblem kommer från utgångna tokens, klockskevning, felaktiga publikvarden, ovantade utfordar URLer eller osakra algoritmantaganden.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const ui: JwtDecoderUI = {
|
|
49
|
+
tokenLabel: 'JWT token',
|
|
50
|
+
tokenPlaceholder: 'Klistra in en JWT har: header.payload.signatur',
|
|
51
|
+
sampleButton: 'Ladda exempel',
|
|
52
|
+
clearButton: 'Rensa',
|
|
53
|
+
statusWaiting: 'Klistra in en token for att avkoda dess JSON header, payload och claims.',
|
|
54
|
+
statusValid: 'JWT avkodad.',
|
|
55
|
+
statusInvalid: 'Detta ser inte ut som en giltig tredelad JWT.',
|
|
56
|
+
statusExpired: 'JWT avkodad, men exp claim har redan gått ut.',
|
|
57
|
+
statusUnsigned: 'JWT avkodad, men den ar osignerad eller anvander algoritmen none.',
|
|
58
|
+
headerTitle: 'Header',
|
|
59
|
+
payloadTitle: 'Payload',
|
|
60
|
+
signatureTitle: 'Signatur',
|
|
61
|
+
claimsTitle: 'Registrerade claims',
|
|
62
|
+
copyHeader: 'Kopiera avkodad header',
|
|
63
|
+
copyPayload: 'Kopiera avkodad payload',
|
|
64
|
+
copySignature: 'Kopiera signatur',
|
|
65
|
+
copyAll: 'Kopiera allt',
|
|
66
|
+
copiedLabel: 'Kopierad',
|
|
67
|
+
invalidTokenTitle: 'Ogiltig JWT',
|
|
68
|
+
invalidTokenBody: 'Kontrollera att token har tre punktseparerade base64url segment.',
|
|
69
|
+
invalidSegmentError: 'Kontrollera att token har tre punktseparerade base64url segment.',
|
|
70
|
+
invalidDecodeError: 'Header eller payload kunde inte avkodas som giltig JSON.',
|
|
71
|
+
emptyJson: '{}',
|
|
72
|
+
signaturePresent: 'Signatursegment finns; verifiera det i ditt autentiseringslager med ratt nyckel.',
|
|
73
|
+
signatureMissing: 'Inget signatursegment',
|
|
74
|
+
algorithmLabel: 'Algoritm',
|
|
75
|
+
typeLabel: 'Typ',
|
|
76
|
+
issuerLabel: 'Utfordare',
|
|
77
|
+
subjectLabel: 'Amne',
|
|
78
|
+
audienceLabel: 'Publik',
|
|
79
|
+
issuedAtLabel: 'Utfordad',
|
|
80
|
+
notBeforeLabel: 'Giltig från',
|
|
81
|
+
expiresAtLabel: 'Galler till',
|
|
82
|
+
claimMissing: 'Saknas',
|
|
83
|
+
privacyNote: 'Avkodning sker i din webblasarsession. Klistra inte in produktionshemligheter i något verktyg om inte din sakerhetspolicy tillåter det.',
|
|
84
|
+
sampleToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJnYW1lYm9iLXVzZXItNDIiLCJuYW1lIjoiR2FtZUJvYiBEZXZlbG9wZXIiLCJpc3MiOiJodHRwczovL3d3dy5nYW1lYm9iLmRldiIsImF1ZCI6ImRldmVsb3Blci10b29scyIsImlhdCI6MTcxNzIwMDAwMCwibmJmIjoxNzE3MjAwMDAwLCJleHAiOjE4OTM0NTYwMDAsInJvbGUiOiJhZG1pbiJ9.demo-signature',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
88
|
+
'@context': 'https://schema.org',
|
|
89
|
+
'@type': 'FAQPage',
|
|
90
|
+
mainEntity: faq.map((item) => ({
|
|
91
|
+
'@type': 'Question',
|
|
92
|
+
name: item.question,
|
|
93
|
+
acceptedAnswer: {
|
|
94
|
+
'@type': 'Answer',
|
|
95
|
+
text: item.answer,
|
|
96
|
+
},
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const howToSchema: WithContext<HowTo> = {
|
|
101
|
+
'@context': 'https://schema.org',
|
|
102
|
+
'@type': 'HowTo',
|
|
103
|
+
name: title,
|
|
104
|
+
description,
|
|
105
|
+
step: howTo.map((step, index) => ({
|
|
106
|
+
'@type': 'HowToStep',
|
|
107
|
+
position: index + 1,
|
|
108
|
+
name: step.name,
|
|
109
|
+
text: step.text,
|
|
110
|
+
})),
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
114
|
+
'@context': 'https://schema.org',
|
|
115
|
+
'@type': 'SoftwareApplication',
|
|
116
|
+
name: title,
|
|
117
|
+
description,
|
|
118
|
+
applicationCategory: 'DeveloperApplication',
|
|
119
|
+
operatingSystem: 'Any',
|
|
120
|
+
offers: {
|
|
121
|
+
'@type': 'Offer',
|
|
122
|
+
price: '0',
|
|
123
|
+
priceCurrency: 'EUR',
|
|
124
|
+
},
|
|
125
|
+
inLanguage: 'sv',
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export const content: ToolLocaleContent<JwtDecoderUI> = {
|
|
129
|
+
slug,
|
|
130
|
+
title,
|
|
131
|
+
description,
|
|
132
|
+
ui,
|
|
133
|
+
faqTitle: 'Vanliga frågor om JWT avkodaren',
|
|
134
|
+
faq,
|
|
135
|
+
bibliographyTitle: 'JWT specifikationer och sakerhetsreferenser',
|
|
136
|
+
bibliography,
|
|
137
|
+
howTo,
|
|
138
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
139
|
+
seo: [
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Avkoda JWT utan att forlora sakerhetskontexten',
|
|
143
|
+
level: 2,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'paragraph',
|
|
147
|
+
html: 'En JSON Web Token ser kompakt ut, men innehåller ofta just den detalj som forklarar ett autentiseringsfel: signaturalgoritmen, utfordare, publik, amne, utfardandetid, giltigt från tid, utgångstid och applikationsspecifika auktoriseringsclaims. Denna <strong>JWT avkodare, tolk och anspraksinspektor</strong> omvandlar de tre tokensegmenten till lasbar JSON så att du kan felsoka autentiseringsfloden snabbare.',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'diagnostic',
|
|
151
|
+
variant: 'warning',
|
|
152
|
+
title: 'Avkodad betyder inte trovordig',
|
|
153
|
+
html: 'Vem som helst kan base64url avkoda en JWT. Fortroende borjar forst nar din applikation har verifierat signaturen med ratt hemlighet, publik nyckel eller JWKS och sedan validerat utfordare, publik, utgångstid och eventuella domanspecifika claims. Anvand detta verktyg for att inspektera data, inte for att acceptera en token som autentisk.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'title',
|
|
157
|
+
text: 'Vad varje JWT segment berattar',
|
|
158
|
+
level: 3,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'table',
|
|
162
|
+
headers: ['Segment', 'Typiskt innehåll', 'Felsokningsvarde'],
|
|
163
|
+
rows: [
|
|
164
|
+
['Header', 'Algoritm, tokentyp och valfritt nyckel ID', 'Visar om tokenen forvantar HS256, RS256, ES256 eller en annan verifieringsstrategi.'],
|
|
165
|
+
['Payload', 'Registrerade claims och applikationsclaims', 'Avslojar identitet, klientorganisation, scopar, roller, utgångstid och publikavvikelser.'],
|
|
166
|
+
['Signatur', 'Kryptografiska signaturbytes kodade som base64url', 'Bekraftar att ett signatursegment finns, men måste verifieras med ratt nyckel på annat håll.'],
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'title',
|
|
171
|
+
text: 'Claims som oftast forklarar trasig autentisering',
|
|
172
|
+
level: 3,
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: 'list',
|
|
176
|
+
items: [
|
|
177
|
+
'<strong>exp:</strong> om tokenen har gått ut kan uppdateringslogiken eller klockinstallningarna vara felaktiga.',
|
|
178
|
+
'<strong>nbf:</strong> om tokenen annu inte ar aktiv kan server och identitetsleverantors klockor vara osynkroniserade.',
|
|
179
|
+
'<strong>iss:</strong> om utfordar URLen skiljer sig från konfigurationen kan tokenen komma från fel klientorganisation eller miljo.',
|
|
180
|
+
'<strong>aud:</strong> om publiken inte matchar API identifikatorn skapades tokenen for en annan resurs.',
|
|
181
|
+
'<strong>alg:</strong> om algoritmen ar ovantad kan din verifierare avvisa tokenen eller blottlagga ett farligt konfigurationsmisstag.',
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: 'title',
|
|
186
|
+
text: 'Anvandningsfall for en JWT tolk under utveckling',
|
|
187
|
+
level: 3,
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'comparative',
|
|
191
|
+
columns: 3,
|
|
192
|
+
items: [
|
|
193
|
+
{
|
|
194
|
+
title: 'Frontend felsokning',
|
|
195
|
+
description: 'Inspektera ID tokens och access tokens som tas emot efter inloggning for att bekrafta scopar, roller och profilclaims.',
|
|
196
|
+
icon: 'mdi:monitor-dashboard',
|
|
197
|
+
points: ['Kontrollera profilclaims', 'Bekrafta scopar och roller', 'Jamfor inloggningsmiljoer'],
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
title: 'Backend API QA',
|
|
201
|
+
description: 'Jamfor forvantade utfordar och publikvarden med den token som faktiskt skickas i en Authorization header.',
|
|
202
|
+
icon: 'mdi:api',
|
|
203
|
+
highlight: true,
|
|
204
|
+
points: ['Validera publikens utformning', 'Upptack utfordaravvikelser', 'Inspektera bearer tokens'],
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
title: 'Identitetsleverantor installation',
|
|
208
|
+
description: 'Kontrollera om claims från Auth0, Azure AD, Cognito, Keycloak eller en anpassad leverantor ar utformade som din app forvantar sig.',
|
|
209
|
+
icon: 'mdi:account-key',
|
|
210
|
+
points: ['Granska klientorganisationsdata', 'Kontrollera anpassade claims', 'Jamfor leverantorsmappningar'],
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
type: 'title',
|
|
216
|
+
text: 'Vanliga JWT misstag som denna inspektor gor uppenbara',
|
|
217
|
+
level: 3,
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
type: 'proscons',
|
|
221
|
+
title: 'Snabba kontroller mot fortroendebeslut',
|
|
222
|
+
items: [
|
|
223
|
+
{
|
|
224
|
+
pro: 'Se felaktiga tokens omedelbart.',
|
|
225
|
+
con: 'Den kan inte kanna till din forvantade publik eller utfordare.',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
pro: 'Konvertera Unix tidsstampel claims till lasbara datum.',
|
|
229
|
+
con: 'Den kan inte verifiera en signatur utan det verkliga nyckelmaterialet.',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
pro: 'Upptack saknade utfordar, publik, amnes eller typvarden.',
|
|
233
|
+
con: 'Den kan inte bevisa att scopar och roller ar sakra for din applikation.',
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
type: 'summary',
|
|
239
|
+
title: 'Rekommenderat arbetsflode',
|
|
240
|
+
items: [
|
|
241
|
+
'Avkoda tokenen for att forstå vad klienten eller APIet faktiskt tog emot.',
|
|
242
|
+
'Kontrollera exp, nbf, iss, aud, sub och alg innan du går vidare med applikationslogiken.',
|
|
243
|
+
'Verifiera signaturer och fortroendebeslut endast i ditt autentiseringslager.',
|
|
244
|
+
'Undvik att dela kansliga produktions JWTer i arenden, loggar eller skarmdumpar.',
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
};
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { JwtDecoderUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'jwt-cozucu-ayristirici-ve-claims-denetleyicisi';
|
|
7
|
+
const title = 'JWT Cozucu, Ayrıstırıcı ve Claims Denetleyicisi';
|
|
8
|
+
const description = 'Bir JSON Web Token yapıstırın, header ve payload kısmını anında cozun, kayıtlı claimsleri inceleyin, suresi dolmus tokenleri tespit edin ve kimlik dogrulama akıslarında hata ayıklamak icin temiz JSON kopyalayın.';
|
|
9
|
+
|
|
10
|
+
const howTo = [
|
|
11
|
+
{
|
|
12
|
+
name: 'JWTyi yapıstırın',
|
|
13
|
+
text: 'Authorization header, cookie, log kaydı veya kimlik saglayıcıdan bir token kopyalayın ve giris alanına yapıstırın.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: 'Cozulmus header ve payloadı okuyun',
|
|
17
|
+
text: 'Arac tokeni header, payload ve imza olarak ayırır, ardından hızlı inceleme icin JSON segmentlerini ayrı panellerde gosterir.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'Onemli claimsleri kontrol edin',
|
|
21
|
+
text: 'Unix zaman damgalarını manuel olarak donusturmeden algoritma, yayıncı, hedef kitle, konu, yayınlanma zamanı, gecerlilik baslangıcı ve sona erme suresini gozden gecirin.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'Ihtiyacınız olan veriyi kopyalayın',
|
|
25
|
+
text: 'Ekibinizle temizlenmis bir hata ayıklama anlık goruntusu paylasmanız gerektiginde bir cozulmus bolumu veya tum cozulmus cıktıyı kopyalayın.',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const faq = [
|
|
30
|
+
{
|
|
31
|
+
question: 'JWTnin cozulmesi tokenin gecerli oldugunu kanıtlar mı?',
|
|
32
|
+
answer: 'Hayır. Cozme islemi yalnızca base64url ile kodlanmıs header ve payloadı ortaya cıkarır. Bir token ancak imza, yayıncı, hedef kitle, sona erme suresi ve ilgili claimsler uygulama veya kimlik saglayıcı tarafından dogrulandıktan sonra guvenilirdir.',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
question: 'Bu JWT cozucuyu access tokenler ve ID tokenler icin kullanabilir miyim?',
|
|
36
|
+
answer: 'Evet. Cozucu, standart uc parcalı JWT formatını kullandıkları surece OAuth access tokenleri, OpenID Connect ID tokenleri, oturum tokenleri ve servisler arası tokenleri incelemek icin kullanıslıdır.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
question: 'Imza paneli tokeni neden dogrulamıyor?',
|
|
40
|
+
answer: 'JWT dogrulaması dogru gizli anahtar, acık anahtar veya JWKS yapılandırması gerektirir. Bu arac kasıtlı olarak cozme ve incelemeye odaklanır, boylece gelistiriciler gorunur bir imza dizisinin gecerlilik kanıtıymıs gibi gostermeden token icerigini gorebilir.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: 'Bir JWTde hata ayıklarken ilk olarak neyi kontrol etmeliyim?',
|
|
44
|
+
answer: 'exp, nbf, iss, aud ve alg ile baslayın. Gercek uretim sorunlarının cogu suresi dolmus tokenlerden, saat kaymasından, yanlıs hedef kitle degerlerinden, beklenmedik yayıncı URLlerinden veya guvensiz algoritma varsayımlarından kaynaklanır.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const ui: JwtDecoderUI = {
|
|
49
|
+
tokenLabel: 'JWT tokeni',
|
|
50
|
+
tokenPlaceholder: 'Buraya bir JWT yapıstırın: header.payload.imza',
|
|
51
|
+
sampleButton: 'Ornek yukle',
|
|
52
|
+
clearButton: 'Temizle',
|
|
53
|
+
statusWaiting: 'JSON header, payload ve claims icerigini cozmek icin bir token yapıstırın.',
|
|
54
|
+
statusValid: 'JWT basarıyla cozuldu.',
|
|
55
|
+
statusInvalid: 'Bu gecerli uc parcalı bir JWT gibi gorunmuyor.',
|
|
56
|
+
statusExpired: 'JWT cozuldu, ancak exp claim suresi dolmus.',
|
|
57
|
+
statusUnsigned: 'JWT cozuldu, ancak imzasız veya none algoritması kullanıyor.',
|
|
58
|
+
headerTitle: 'Header',
|
|
59
|
+
payloadTitle: 'Payload',
|
|
60
|
+
signatureTitle: 'Imza',
|
|
61
|
+
claimsTitle: 'Kayıtlı claimsler',
|
|
62
|
+
copyHeader: 'Cozulmus headeri kopyala',
|
|
63
|
+
copyPayload: 'Cozulmus payloadı kopyala',
|
|
64
|
+
copySignature: 'Imzayı kopyala',
|
|
65
|
+
copyAll: 'Tumunu kopyala',
|
|
66
|
+
copiedLabel: 'Kopyalandı',
|
|
67
|
+
invalidTokenTitle: 'Gecersiz JWT',
|
|
68
|
+
invalidTokenBody: 'Tokenin nokta ile ayrılmıs uc base64url segmenti oldugunu kontrol edin.',
|
|
69
|
+
invalidSegmentError: 'Tokenin nokta ile ayrılmıs uc base64url segmenti oldugunu kontrol edin.',
|
|
70
|
+
invalidDecodeError: 'Header veya payload gecerli JSON olarak cozulemedi.',
|
|
71
|
+
emptyJson: '{}',
|
|
72
|
+
signaturePresent: 'Imza segmenti mevcut; dogru anahtarla kimlik dogrulama katmanınızda dogrulayın.',
|
|
73
|
+
signatureMissing: 'Imza segmenti yok',
|
|
74
|
+
algorithmLabel: 'Algoritma',
|
|
75
|
+
typeLabel: 'Tur',
|
|
76
|
+
issuerLabel: 'Yayıncı',
|
|
77
|
+
subjectLabel: 'Konu',
|
|
78
|
+
audienceLabel: 'Hedef kitle',
|
|
79
|
+
issuedAtLabel: 'Yayınlanma',
|
|
80
|
+
notBeforeLabel: 'Gecerlilik baslangıcı',
|
|
81
|
+
expiresAtLabel: 'Sona erme',
|
|
82
|
+
claimMissing: 'Mevcut degil',
|
|
83
|
+
privacyNote: 'Cozme islemi tarayıcı oturumunuzda calısır. Guvenlik politikanız izin vermedikce uretim sırlarını hicbir araca yapıstırmayın.',
|
|
84
|
+
sampleToken: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJnYW1lYm9iLXVzZXItNDIiLCJuYW1lIjoiR2FtZUJvYiBEZXZlbG9wZXIiLCJpc3MiOiJodHRwczovL3d3dy5nYW1lYm9iLmRldiIsImF1ZCI6ImRldmVsb3Blci10b29scyIsImlhdCI6MTcxNzIwMDAwMCwibmJmIjoxNzE3MjAwMDAwLCJleHAiOjE4OTM0NTYwMDAsInJvbGUiOiJhZG1pbiJ9.demo-signature',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
88
|
+
'@context': 'https://schema.org',
|
|
89
|
+
'@type': 'FAQPage',
|
|
90
|
+
mainEntity: faq.map((item) => ({
|
|
91
|
+
'@type': 'Question',
|
|
92
|
+
name: item.question,
|
|
93
|
+
acceptedAnswer: {
|
|
94
|
+
'@type': 'Answer',
|
|
95
|
+
text: item.answer,
|
|
96
|
+
},
|
|
97
|
+
})),
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const howToSchema: WithContext<HowTo> = {
|
|
101
|
+
'@context': 'https://schema.org',
|
|
102
|
+
'@type': 'HowTo',
|
|
103
|
+
name: title,
|
|
104
|
+
description,
|
|
105
|
+
step: howTo.map((step, index) => ({
|
|
106
|
+
'@type': 'HowToStep',
|
|
107
|
+
position: index + 1,
|
|
108
|
+
name: step.name,
|
|
109
|
+
text: step.text,
|
|
110
|
+
})),
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
114
|
+
'@context': 'https://schema.org',
|
|
115
|
+
'@type': 'SoftwareApplication',
|
|
116
|
+
name: title,
|
|
117
|
+
description,
|
|
118
|
+
applicationCategory: 'DeveloperApplication',
|
|
119
|
+
operatingSystem: 'Any',
|
|
120
|
+
offers: {
|
|
121
|
+
'@type': 'Offer',
|
|
122
|
+
price: '0',
|
|
123
|
+
priceCurrency: 'EUR',
|
|
124
|
+
},
|
|
125
|
+
inLanguage: 'tr',
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export const content: ToolLocaleContent<JwtDecoderUI> = {
|
|
129
|
+
slug,
|
|
130
|
+
title,
|
|
131
|
+
description,
|
|
132
|
+
ui,
|
|
133
|
+
faqTitle: 'JWT cozucu SSS',
|
|
134
|
+
faq,
|
|
135
|
+
bibliographyTitle: 'JWT spesifikasyonları ve guvenlik referansları',
|
|
136
|
+
bibliography,
|
|
137
|
+
howTo,
|
|
138
|
+
schemas: [appSchema, faqSchema, howToSchema],
|
|
139
|
+
seo: [
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'JWTleri guvenlik baglamını kaybetmeden cozun',
|
|
143
|
+
level: 2,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'paragraph',
|
|
147
|
+
html: 'Bir JSON Web Token kucuk gorunur, ancak cogu zaman bir kimlik dogrulama hatasını acıklayan tam ayrıntıyı tasır: imza algoritması, yayıncı, hedef kitle, konu, yayınlanma zamanı, gecerlilik baslangıc zamanı, sona erme suresi ve uygulamaya ozel yetkilendirme claimsleri. Bu <strong>JWT cozucu, ayrıstırıcı ve claims denetleyicisi</strong>, uc token segmentini okunabilir JSONa donusturerek kimlik dogrulama akıslarında daha hızlı hata ayıklamanıza olanak tanır.',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
type: 'diagnostic',
|
|
151
|
+
variant: 'warning',
|
|
152
|
+
title: 'Cozulmus olması guvenilir oldugu anlamına gelmez',
|
|
153
|
+
html: 'Herkes bir JWTyi base64url olarak cozebilir. Guven, yalnızca uygulamanız imzayı dogru gizli anahtar, acık anahtar veya JWKS ile dogruladıktan ve ardından yayıncı, hedef kitle, sona erme suresi ve alana ozgu claimsleri onayladıktan sonra baslar. Bu aracı verileri incelemek icin kullanın, bir tokeni gercek olarak kabul etmek icin degil.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'title',
|
|
157
|
+
text: 'Her JWT segmentinin size soyledikleri',
|
|
158
|
+
level: 3,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'table',
|
|
162
|
+
headers: ['Segment', 'Tipik icerik', 'Hata ayıklama degeri'],
|
|
163
|
+
rows: [
|
|
164
|
+
['Header', 'Algoritma, token turu ve istege baglı anahtar kimligi', 'Tokenin HS256, RS256, ES256 veya baska bir dogrulama stratejisi bekleyip beklemedigini gosterir.'],
|
|
165
|
+
['Payload', 'Kayıtlı claimsler ve uygulama claimsleri', 'Kimlik, kiracı, kapsamlar, roller, sona erme suresi ve hedef kitle uyusmazlıklarını ortaya cıkarır.'],
|
|
166
|
+
['Imza', 'Base64url olarak kodlanmıs kriptografik imza baytları', 'Bir imza segmentinin var oldugunu onaylar, ancak baska bir yerde dogru anahtarla dogrulanmalıdır.'],
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'title',
|
|
171
|
+
text: 'Genellikle bozuk kimlik dogrulamayı acıklayan claimsler',
|
|
172
|
+
level: 3,
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: 'list',
|
|
176
|
+
items: [
|
|
177
|
+
'<strong>exp:</strong> tokenin suresi dolduysa, yenileme mantıgı veya saat ayarları yanlıs olabilir.',
|
|
178
|
+
'<strong>nbf:</strong> token henuz aktif degilse, sunucu ve kimlik saglayıcı saatleri senkronize olmayabilir.',
|
|
179
|
+
'<strong>iss:</strong> yayıncı URLsi yapılandırmadan farklıysa, token yanlıs kiracıdan veya ortamdan gelebilir.',
|
|
180
|
+
'<strong>aud:</strong> hedef kitle API tanımlayıcısıyla eslesmiyorsa, token baska bir kaynak icin olusturulmustur.',
|
|
181
|
+
'<strong>alg:</strong> algoritma beklenmedikse, dogrulayıcınız tokeni reddedebilir veya tehlikeli bir yapılandırma hatasını acıga cıkarabilir.',
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
type: 'title',
|
|
186
|
+
text: 'Gelistirme sırasında JWT ayrıstırıcı kullanım senaryoları',
|
|
187
|
+
level: 3,
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'comparative',
|
|
191
|
+
columns: 3,
|
|
192
|
+
items: [
|
|
193
|
+
{
|
|
194
|
+
title: 'On yuz hata ayıklama',
|
|
195
|
+
description: 'Kapsamları, rolleri ve profil claimslerini dogrulamak icin oturum acıldıktan sonra alınan ID tokenleri ve access tokenleri inceleyin.',
|
|
196
|
+
icon: 'mdi:monitor-dashboard',
|
|
197
|
+
points: ['Profil claimslerini kontrol edin', 'Kapsamları ve rolleri dogrulayın', 'Oturum acma ortamlarını karsılastırın'],
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
title: 'Arka uc API QA',
|
|
201
|
+
description: 'Beklenen yayıncı ve hedef kitle degerlerini, Authorization headerda gercekte gonderilen token ile karsılastırın.',
|
|
202
|
+
icon: 'mdi:api',
|
|
203
|
+
highlight: true,
|
|
204
|
+
points: ['Hedef kitle yapısını dogrulayın', 'Yayıncı uyusmazlıklarını tespit edin', 'Bearer tokenleri inceleyin'],
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
title: 'Kimlik saglayıcı kurulumu',
|
|
208
|
+
description: 'Auth0, Azure AD, Cognito, Keycloak veya ozel bir saglayıcıdan gelen claimslerin uygulamanızın bekledigi sekilde yapılandırılıp yapılandırılmadıgını kontrol edin.',
|
|
209
|
+
icon: 'mdi:account-key',
|
|
210
|
+
points: ['Kiracı verilerini gozden gecirin', 'Ozel claimsleri kontrol edin', 'Saglayıcı eslestirmelerini karsılastırın'],
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
type: 'title',
|
|
216
|
+
text: 'Bu denetleyicinin belirgin hale getirdigi yaygın JWT hataları',
|
|
217
|
+
level: 3,
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
type: 'proscons',
|
|
221
|
+
title: 'Hızlı kontroller ve guven kararları',
|
|
222
|
+
items: [
|
|
223
|
+
{
|
|
224
|
+
pro: 'Hatalı tokenleri hemen gorun.',
|
|
225
|
+
con: 'Beklenen hedef kitlenizi veya yayıncınızı bilemez.',
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
pro: 'Unix zaman damgası claimslerini okunabilir tarihlere donusturun.',
|
|
229
|
+
con: 'Gercek anahtar materyali olmadan bir imzayı dogrulayamaz.',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
pro: 'Eksik yayıncı, hedef kitle, konu veya tur degerlerini tespit edin.',
|
|
233
|
+
con: 'Kapsamların ve rollerin uygulamanız icin guvenli oldugunu kanıtlayamaz.',
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
type: 'summary',
|
|
239
|
+
title: 'En iyi uygulama is akısı',
|
|
240
|
+
items: [
|
|
241
|
+
'Istemcinin veya API\'nin gercekte ne aldıgını anlamak icin tokeni cozun.',
|
|
242
|
+
'Uygulama mantıgına dalmadan once exp, nbf, iss, aud, sub ve algyi kontrol edin.',
|
|
243
|
+
'Imzaları ve guven kararlarını yalnızca kimlik dogrulama katmanınızda dogrulayın.',
|
|
244
|
+
'Hassas uretim JWTlerini biletlerde, loglarda veya ekran goruntulerinde paylasmaktan kacının.',
|
|
245
|
+
],
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
};
|