0

私は、更新されたAzure Mobile Appsと、Google、Microsoft、Twitter、Facebookなどの認証プロバイダを使用して、ユーザーを自分のウェブサイトに認証しています。これらはすべてうまくいき、Azure Mobile Appインスタンスで認証すると、認証されたユーザーを表す有効なJWTトークンが返されます。このトークンは別のASP.NET Core APIサービスへのリクエストを認証するために、サーバにAuthentication Bearerトークンとして送信して送信しています。これらはすべてうまくいきます。Azure Mobile Apps認証に適切なsigningKeyを取得して使用する方法は?

問題は、正しいsigning key値を使用してサーバー上でJWTの検証が行われていることです。テストのために - https://jwt.io/に私のJWTトークンを持っていればAzureから正しいアルゴリズムHS256を使って私の秘密鍵を貼り付けても、 "無効な署名"のエラーを逃すことはできません。私が設定さMicrosoft.AspNetCore.Authentication.JwtBearerからapp.UseJwtBearerAuthenticationを持っている私のASP.NET Core APIサービスを呼び出す場合、同じエリアでは、私は戻って次のことを述べて、エンドポイントから同じ401エラーを取得:

401権限:ベアラエラーは=「invalid_token」、しましたerror_description = " 署名はAzure Mobile Apps offline WEBSITE_AUTH_SIGNING_KEYと私は、私は値を得て、サーバー上だけにIssuerSigningKeyとして日曜日からそれを10個の方法を使用しようとしましたhttps://[Azure-Mobile-Site-Here].scm.azurewebsites.net/Env.cshtmlからWEBSITE_AUTH_SIGNING_KEY使用するようになってるいくつかの他のサイトによると、「無効です

失敗。私はいつも同じエラーを受けます。

これは、サーバー上の構成です。私はコードを逆コンパイルして検証するために最小限のフラグをオンにするだけで、可能な限り絞り込むことを試みました。私は何かを得ることができません。上記の注意点としては

private void ConfigureAuth(IApplicationBuilder app) 
{ 
    //Didn't work attempt #1 
    //byte[] keyBytes = Encoding.UTF8.GetBytes("975BE84E150ABlahBlahBlahA2527E1AAC80606"); 
    //if (keyBytes.Length < 64) 
    //{ 
    // Array.Resize(ref keyBytes, 64); 
    //} 

    //Didn't work attempt #2 
    //byte[] keyBytes = _UTF8Encoder.GetBytes("975BE84E150ABlahBlahBlahA2527E1AAC80606"); 

    //Didn't work attempt #3 
    //var keyAsBytes = Convert.FromBase64String("975BE84E150ABlahBlahBlahA2527E1AAC80606"); 

    //Didn't work attempt #4 
    //var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("975BE84E150ABlahBlahBlahA2527E1AAC80606")); 

    var signingKey = new SymmetricSecurityKey(keyBytes); 

    var tokenValidationParameters = new TokenValidationParameters 
    { 

     RequireExpirationTime = false, 
     RequireSignedTokens = false, 
     SaveSigninToken = false, 
     ValidateActor = false, 
     ValidateAudience = false, 
     ValidateIssuer = false, 
     ValidateLifetime = false, 

     //The signing key must match! 
     ValidateIssuerSigningKey = true, 
     IssuerSigningKey = signingKey, 
}; 

    app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true, 
     TokenValidationParameters = tokenValidationParameters 
    }); 

} 

、私はすでにこのすべてと、それは動作しませんでしたが試してみて、バイパスするValidateIssuerSigningKey = falseを作ってみました。私はまだ同じエラーが発生します。それはビットが結果に影響を与えなかったようです。

WEBSITE_AUTH_SIGNING_KEYが正しいと確信していないので、私はこの時点で迷っていると思います。signingKeyです。それがなければ、私は何のためにも私の車輪を回転させません。

Azure Mobile Appインスタンスに対してJWTトークンを生成するのに適切なものは何ですか。また、トークンを検証するためにサーバ上のミドルウェア構成で正しくエンコードするにはどうすればよいですか?

答えて

1

WEBSITE_AUTH_SIGNING_KEYは、適切な環境変数/アプリケーション設定です。ただし、16進文字列としてエンコードされます。あなたはそれを使用する前に解読する必要があります。ノードSDKでは、これを行うコードは次のとおりです。

function hexStringToBuffer(hexString) { 
    var bytes = []; 
    for (var i = 0; i < hexString.length; i += 2) 
     bytes.push(parseInt(hexString.substr(i, 2), 16)); 
    return new Buffer(bytes); 
} 

これをC#に変換するだけで済みます。

+1

ありがとうございます!私はそれがどのようにコード化されたのか、それで推測するのか分からなかった。助けてくれてありがとう。 C#のコードサンプルは、ここから動作します:http://stackoverflow.com/a/724905/410937 – atconway

関連する問題