0

ClaimsAuthenticationManager を使用して acs から取得した raw トークン値を変更するにはどうすればよいですか。トークンにロールを追加したいのですが、クレーム ID にロールを追加できましたが、raw トークンには反映されていません。

 string rawToken = string.Empty;

ClaimsIdentity identity = HttpContext.User.Identity as ClaimsIdentity;

if (null != identity)
 {
   SimpleWebToken token = identity.BootstrapToken as SimpleWebToken;

    if (null != token)
     {
       rawToken = token.RawToken;
     }
  }

ロールは ID に反映されますが、ブートストラップ トークンに追加されません。

4

1 に答える 1

0

ブートストラップ トークンは、ClaimIdentity の構築に使用されます。ClaimsAuthenticationManager には、ACS トークンから作成された incomingPrincipal が既にあります。また、トークン内のクレームは ACS によって署名されており、理論的には、トークン コンシューマでの検証の問題なしに変更することはできません。

実装しようとしているシナリオは何ですか? WCF サービスなどでトークンを再利用していますか?

更新 ACS からトークンを変更するサンプル コードを次に示します (SAML2 トークンを使用)。注意:異なるデータを持つ SAML アサーションは異なる ID を持つことが非常に重要です。アサーション「テンプレート」がロードされ、データの特定のビットが入力されるスキームを実装する場合、Id を変更する必要があります。そうしないと、デバッガーで変更されたアサーション値が表示されますが、WriteToken メソッドは、トークン内に格納されているソース バイトから元の変更されていないトークンを書き込みます。 .

X509Certificate2 singingCertificate = new X509Certificate2(certificateFile, certificatePassword);
Saml2SecurityTokenHandler handler = CreateTokenHandler();
Saml2SecurityToken baseToken = GetTemplateToken();
Saml2Assertion assertion = templateToken.Assertion;

//modify template token - change date, add claims etc
assertion.Id = new Saml2Id();
//order is important, because in sampleToken this property is already setup and NotBefore date can not be NotOnOrAfter
assertion.Conditions.NotOnOrAfter = DateTime.MaxValue;
assertion.Conditions.NotBefore = DateTime.UtcNow;

//prepare to resign token assertions
X509AsymmetricSecurityKey signingKey = new X509AsymmetricSecurityKey(singingCertificate);
X509RawDataKeyIdentifierClause x509clause = new X509RawDataKeyIdentifierClause(singingCertificate);
SecurityKeyIdentifier keyIdentifier = new SecurityKeyIdentifier(new SecurityKeyIdentifierClause[] { x509clause });
assertion.SigningCredentials = new SigningCredentials
    (
    signingKey,
    assertion.SigningCredentials.SignatureAlgorithm,
    assertion.SigningCredentials.DigestAlgorithm,
    keyIdentifier
    );
//create and sign modified token
Saml2SecurityToken token = new Saml2SecurityToken(assertion, new ReadOnlyCollection<SecurityKey>(new List<SecurityKey>() { signingKey }), templateToken.IssuerToken);
于 2013-02-25T13:29:09.470 に答える