5

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

4

2 に答える 2

2

... または JWT (JSON Web トークン)。ACS はこれらもサポートしています。この記事を確認してください: Microsoft .NET Framework 4.5 の JSON Web トークン ハンドラー ここでは、対称キー ベースの 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;
于 2013-02-10T12:41:22.080 に答える
0

REST エンドポイントで SAML トークンを使用できますが、多くの場合、代わりに Simple Web Tokens (SWT) を使用している人がいます。より小さく、よりシンプルに、など。

たとえば、ACS (Windows Azure Platform の Access Control Service) はこれを実装しています。

于 2011-02-05T04:51:52.000 に答える