0

シークレットは、以下のコードを使用して .Net で作成されます

var key = new byte[32];
RNGCryptoServiceProvider.Create().GetBytes(key);
var base64Secret = TextEncodings.Base64Url.Encode(key)
Audience newAudience = new Audience { ClientId = clientId, Base64Secret = base64Secret, Name = name };

トークンは、以下のコードを使用して.Netで作成されます

string symmetricKeyAsBase64 = audience.Base64Secret;    
var keyByteArray = TextEncodings.Base64Url.Decode(symmetricKeyAsBase64);
var signingKey = new HmacSigningCredentials(keyByteArray);
var issued = data.Properties.IssuedUtc;
var expires = data.Properties.ExpiresUtc;
var token = new JwtSecurityToken(_issuer, audienceId, data.Identity.Claims, issued.Value.UtcDateTime, expires.Value.UtcDateTime, signingKey);

上記のコードは、Python でデコードする必要があるトークンを正常に作成しました。

シークレットはXYZ、生成されてデータベースに保存されるものです。シークレットはTextEncodings.Base64Url.Encode、データベースに格納する前に を使用してエンコードされます。「=」を追加して、Pythonで秘密鍵をデコードしようとしました

base64.urlsafe_b64decode("XYZ=")

以下の方法を使用して、二重等しい「==」を追加してみました

base64.b64decode("XYZ==")

最後に、シークレットをデコードして使用するために上記の2つの方法を試しましたjwt.decode()

jwt.decode(token, secret, algorithms=['HS256'])

何も機能しませんでした。

トークンは次のようになります

HEADER:ALGORITHM & TOKEN TYPE

{
  "typ": "JWT",
  "alg": "HS256"
}
PAYLOAD:DATA

{
  "unique_name": "devuser",
  "sub": "devuser",
  "role": [
    "Manager",
    "Supervisor"
  ],
  "iss": "https://xxxxxxx.azurewebsites.net",
  "aud": "6A00574AE5514C1C90D2D5332FEF78F9",
  "exp": 1596636265,
  "nbf": 1596634465
}

**VERIFY SIGNATURE**
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
)
4

1 に答える 1