Возможно ли сертификат сервера разрешить список клиентских сертификатов в IIS? [Дубликат]

В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

2
задан jlew 13 March 2015 в 20:31
поделиться

1 ответ

Вам не нужно использовать iisClientCertificateMappingAuthentication. Сертификат клиента доступен в HttpContext.

var clientCert = HttpContext.Request.ClientCertificate;

Либо вы включаете RequireClientCertificate на весь сайт, либо используете отдельную страницу login-with-clientcertificate .

Ниже приведен один из способов сделать это в ASP.NET MVC. Надеемся, вы сможете использовать его части, чтобы соответствовать вашей конкретной ситуации.

  1. Сначала убедитесь, что вам разрешено устанавливать SslFlags в web.config, включив делегирование функций.

IIS - Feature delegation [/g1]

  1. Сделать сайт приемлемым (но не требуется) Сертификаты клиента enter image description here [/g2]
  2. Установить путь для входа в систему, с-clientcertificate-page, где потребуются сертификаты клиентов. В этом случае пользовательский контроллер с действием CertificateSignin. web.config [/g3]
  3. Создать контроллер входа (псевдокод)
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    [AllowAnonymous()]
    public ActionResult CertificateSignIn()
    {
        //Get certificate
        var clientCert = HttpContext.Request.ClientCertificate;
    
        //Validate certificate
        if (!clientCert.IsPresent || !clientCert.IsValid)
        {
            ViewBag.LoginFailedMessage = "The client certificate was not present or did not pass validation";
            return View("Index");
        }
    
        //Call your "custom" ClientCertificate --> User mapping method.
        string userId;
        bool myCertificateMappingParsingResult = Helper.MyCertificateMapping(clientCert, out userId);
    
        if (!myCertificateMappingParsingResult)
        {
            ViewBag.LoginFailedMessage = "Your client certificate did not map correctly";
        }
        else
        {
            //Use custom Membersip provider. Password is not needed!
            if (Membership.ValidateUser(userId, null))
            {
                //Create authentication ticket
                FormsAuthentication.SetAuthCookie(userId, false);
                Response.Redirect("~/");
            }
            else
            {
                ViewBag.LoginFailedMessage = "Login failed!";
            }
        }
    
        return View("Index");
    }
    
6
ответ дан magnus 24 August 2018 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: