RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 609200
Accepted
Denis Bubnov
Denis Bubnov
Asked:2020-12-29 19:40:11 +0000 UTC2020-12-29 19:40:11 +0000 UTC 2020-12-29 19:40:11 +0000 UTC

获取 SAML 身份验证上下文类 URI 的描述

  • 772

我SecurityToken用Saml2SecurityToken以下内容创建:

SecurityToken st = new Saml2SecurityToken(
  new Saml2Assertion(new Saml2NameIdentifier("localUser"))
  {
      Statements =
      {
          new Saml2AttributeStatement(new List<Saml2Attribute>()
          {
              new Saml2Attribute(
                  "http://identityserver.thinktecture.com/claims/identityprovider", 
                  "promProvider")
          }),
          new Saml2AuthenticationStatement(new Saml2AuthenticationContext(
              new Uri("urn:oasis:names:tc:SAML:2.0:ac:classes:Password"))) 
      },
      Subject = new Saml2Subject(new Saml2NameIdentifier("administrator")) { 
          SubjectConfirmations = { new Saml2SubjectConfirmation(
              new Uri("urn:oasis:names:tc:SAML:2.0:cm:bearer"))}},
      SigningCredentials = new SigningCredentials(
          new X509AsymmetricSecurityKey(certificate), 
          SecurityAlgorithms.RsaSha256Signature, 
          SecurityAlgorithms.Sha256Digest, 
          new SecurityKeyIdentifier() { new X509RawDataKeyIdentifierClause(certificate) }) 
  }, new ReadOnlyCollection<SecurityKey>(new List<SecurityKey>()), securityToken);

所有这些都用于为在安全协议上运行的服务创建代理:WS2007FederationHttpBinding并且它成功运行,我不会详细介绍,因为问题的本质是不同的。问题如下,有些台词是我用手规定的,我不太喜欢,即:

  1. "urn:oasis:names:tc:SAML:2.0:ac:classes:Password"- 身份验证上下文类 URI
  2. "urn:oasis:names:tc:SAML:2.0:cm:bearer"- 主题确认方法

是否有任何参考资料可以让我获得这些行,例如,枚举或存储它的类,这样的计划:

// "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
var rsaSha256Signature = SecurityAlgorithms.RsaSha256Signature;
// "http://www.w3.org/2001/04/xmlenc#sha256"
var sha256 = SecurityAlgorithms.Sha256Digest;

如果有,我在哪里可以买到它们?

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Denis Bubnov
    2020-12-30T17:10:28Z2020-12-30T17:10:28Z

    解决方法是:SecurityToken通过SecurityTokenDescriptorwith创建Saml2SecurityTokenHandler。在这种情况下,不需要常量。结果,代码变小了,代码也变得好看了:

    var saml2SecurityTokenHandler = new Saml2SecurityTokenHandler();
    var securityTokenDescriptor = new SecurityTokenDescriptor()
    {
        TokenIssuerName = "production",
        Subject = new ClaimsIdentity("administrator"),
        Token = new X509SecurityToken(certificate),
        SigningCredentials = new SigningCredentials(
            new X509AsymmetricSecurityKey(certificate),
            SecurityAlgorithms.RsaSha256Signature,
            SecurityAlgorithms.Sha256Digest,
            new SecurityKeyIdentifier() { new X509RawDataKeyIdentifierClause(certificate) })
    };
    
    var securityToken = saml2SecurityTokenHandler.CreateToken(securityTokenDescriptor);
    

    我在用户@PavelMayorov 的建议帮助下解决了这个问题,特别感谢他。但是我没有找到常量,如果找到了,我会添加到我的答案中。

    遵循了另一个关于使用X509SigningCredentialsinstead的建议,SigningCredentials并得到了适合我的最终结果:

    var saml2SecurityTokenHandler = new Saml2SecurityTokenHandler();
    var securityTokenDescriptor = new SecurityTokenDescriptor()
    {
        TokenIssuerName = "production",
        Subject = new ClaimsIdentity("administrator"),
        Token = new X509SecurityToken(certificate),
        SigningCredentials = new X509SigningCredentials(certificate)
    };
    
    var securityToken = saml2SecurityTokenHandler.CreateToken(securityTokenDescriptor);
    

    一切工作稳定。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5