在asp核心Web应用程序中使用openid auth 2.0提供程序进行身份验证

时间:2018-01-10 11:17:24

标签: c# authentication asp.net-core openid identity

我正在尝试使用和外部登录方案和openid身份服务器(rediris)在asp核心2中创建一个Web依赖方。

问题是外部身份服务器使用自己的框架(papi),具有以下特征:

  1. 规格open id authentication 2.0simple registration extension
  2. 发现类型html-discovery(仅获取提供者和ns)
  3. 没有userinfo端点
  4. 问题和解决方案:

    1. 使用html-discovery获取身份提供程序 - >解决
    2. 使用智能模式,建立关联并获取“assoc_handle”,“mac_key”和“expires_in” - >解决。
    3. 获取OP标识符 - >解决。
    4. 我需要创建一个制作和身份验证请求的挑战,并在外部服务器登录后,获取具有临时密钥和用户提供的标识符的响应(由用户在openid提供程序中的登录重定向中选择)
    5. 我尝试了几种方法,但没有一种允许我返回我的return_url

      验证/ OpenidConnect的设置(不起作用):

      .AddOpenIdConnect(o =>
      {
          o.ClientId = "ClientId";
          o.ClientSecret = "ClientSecret";
          o.ResponseType = "code"; 
          o.Authority = "https://yo.rediris.es/papoid-server.php";
          //o.ProtocolValidator.RequireNonce = true;
          o.SaveTokens = true;
          o.GetClaimsFromUserInfoEndpoint = false;
          o.AuthenticationMethod = OpenIdConnectRedirectBehavior.FormPost;
          //test with claims   
          o.ClaimActions.MapUniqueJsonKey("sub", "sub");
          o.ClaimActions.MapUniqueJsonKey("name", "name");
          o.ClaimActions.MapUniqueJsonKey("profile", "profile");
          o.ClaimActions.MapUniqueJsonKey("email", "email");
          o.ClaimActions.MapUniqueJsonKey("fullname", "fullname");
          o.ClaimActions.MapUniqueJsonKey(ClaimTypes.Email, "email"); 
          o.Scope.Add("openid");
         //o.Scope.Add("phone");
          o.Scope.Add("email");
          o.Scope.Add("address");
      }
      

      创建的必要请求:

      POST https://yo.rediris.es/papoid-server.php HTTP/1.1
      
      openid.ns=http://specs.openid.net/auth/2.0
      &openid.ns.sreg=http://openid.net/extensions/sreg/1.1
      &openid.sreg.required=nickname,email
      &openid.sreg.optional=fullname
      &openid.realm=http://localhost:5002/
      &openid.mode=checkid_setup 
      &openid.return_to=http://localhost:5002/login?nonce=whatevercode
      &openid.identity=http://specs.openid.net/auth/2.0/identifier_select
      &openid.claimed_id=http://yo.rediris.es/
      &openid.assoc_handle={HMAC-SHA1}{5a3294ef}{A8uNlg==}
      

      此后,登录,重定向......在OP提供商中,我需要在http://localhost:5002/login?nonce=whatevercode

      中获取正文回复

      提前致谢

0 个答案:

没有答案