2011-01-17 11 views
5

私たちは、RESTベースのサービスに対してSTS(クレームベースの認証)を実装しています。 JSONを使用してRESTサービスを作成することを決定した多くの理由の1つは、ワイヤー上の小さなフットプリントでした。 STSでは、SAMLトークンはSAMLサイズが数Kバイトになります。オブジェクトのリストを返さないREST呼び出しのほとんどでは、応答サイズは100sバイトと小さく、これらの呼び出しではこのトークンがオーバーヘッドになりすぎます。あなたのプロジェクトでこれをどのように処理していますか?SAMLトークンサイズとREST

答えて

0

RESTエンドポイントでSAMLトークンを使用できますが、代わりにSimple Web Token(SWT)を使用している人が見つかることがよくあります。小さく、シンプルななど

ACS(Windows Azure Platformのアクセス制御サービス)は、これを実装しています。

+0

SWTが前進しているようには見えません。 JWTも未発達です。 SAMLは今のところ対処しなければならないようです。 http://startersts.codeplex.com/discussions/242113?ProjectName=startersts –

2

...またはJWT(JSon Webトークン)。 ACSもこれをサポートしています。 この記事をチェックJSON Web Token Handler for the Microsoft .NET Framework 4.5 対称キーベースのHMAC SHA256で署名されたJWTを発行し検証する.Net 4.5を使用したこのライブラリの使用例を次に示します。

string jwtIssuer = "MyIssuer"; 
string jwtAudience = "MyAudience"; 

// Generate symmetric key for HMAC-SHA256 signature 
RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider(); 
byte[] keyForHmacSha256 = new byte[64]; 
cryptoProvider.GetNonZeroBytes(keyForHmacSha256); 

/////////////////////////////////////////////////////////////////// 
// Create signing credentials for the signed JWT. 
// This object is used to cryptographically sign the JWT by the issuer. 
SigningCredentials sc = new SigningCredentials(
           new InMemorySymmetricSecurityKey(keyForHmacSha256), 
           "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256", 
           "http://www.w3.org/2001/04/xmlenc#sha256"); 

/////////////////////////////////////////////////////////////////// 
// Create token validation parameters for the signed JWT 
// This object will be used to verify the cryptographic signature of the received JWT 
TokenValidationParameters validationParams = 
    new TokenValidationParameters() 
    { 
     AllowedAudience = s_jwtAudience, 
     ValidIssuer = s_jwtIssuer, 
     ValidateExpiration = true, 
     ValidateNotBefore = true, 
     ValidateIssuer = true, 
     ValidateSignature = true, 
     SigningToken = new BinarySecretSecurityToken(keyForHmacSha256), 
    }; 

/////////////////////////////////////////////////////////////////// 
// Create JWT handler 
// This object is used to write/sign/decode/validate JWTs 
JWTSecurityTokenHandler jwtHandler = new JWTSecurityTokenHandler(); 

// Create a simple JWT claim set 
IList<Claim> payloadClaims = new List<Claim>() { new Claim("clm1", "clm1 value"), }; 

// Create a JWT with signing credentials and lifetime of 12 hours 
JWTSecurityToken jwt = 
    new JWTSecurityToken(jwtIssuer, jwtAudience, payloadClaims, sc, DateTime.UtcNow, DateTime.UtcNow.AddHours(12.0)); 

// Serialize the JWT 
// This is how our JWT looks on the wire: <Base64UrlEncoded header>.<Base64UrlEncoded body>.<signature> 
string jwtOnTheWire = jwtHandler.WriteToken(jwt); 

// Validate the token signature (we provide the shared symmetric key in `validationParams`) 
// This will throw if the signature does not validate 
jwtHandler.ValidateToken(jwtOnTheWire, validationParams); 

// Parse JWT from the Base64UrlEncoded wire form (<Base64UrlEncoded header>.<Base64UrlEncoded body>.<signature>) 
JWTSecurityToken parsedJwt = jwtHandler.ReadToken(jwtOnTheWire) as JWTSecurityToken; 
+0

対称キーを使用する機能が見つからないようです。つかの間の種類:-( –

+1

あなたは何を意味するのか分かりませんが、その場合には、JWTを作成、符号化、シリアル化して逆の処理を行うコードを表示するために私の答えを更新しました。 – Kastorskij

+0

はい!私が必要としていただけでパーフェクト!ありがとう! –