Исключение NullReferenceException в Bootstraptoken (проверка подлинности ACS)

I've been following the steps to make a Windows 8 Store app get an ACS token as described here: Does the WebAuthenticationBroker work in Windows 8 Metro App post Release Candidate

Метод проверки подлинности клиента Windows 8

private async void Authenticate()
    {
        WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
            WebAuthenticationOptions.None,
            new Uri("https://myACSnamespace.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=http://localhost:12714/"),
            new Uri("http://mypublicIPaddress:80/WebAppMVCAPI/api/federation/end"));

Мой контроллер в веб-приложении запрограммирован следующим образом:

public class FederationController : ApiController
{
    protected virtual string ExtractBootstrapToken()
    {
        return HttpContext.Current.User.BootstrapToken();
    }

    [HttpGet]
    public string Get()
    {
        return "Hello Get World";
    }

    [HttpPost]
    public HttpResponseMessage Post()
    {
        var response = this.Request.CreateResponse(HttpStatusCode.Redirect);
        response.Headers.Add("Location", "/WebAppMVCAPI/api/federation/end?acsToken=" + ExtractBootstrapToken());
        return response;
    }
}

}

Идея состоит в том, чтобы приложение для магазина Windows 8 получало токен от ACS с входом в Facebook. Когда я запускаю клиент win8, приложение показывает страницу входа в систему Facebook. Однако команда возвращает HttpContext.Current.User.Bootstraptoken() не работает со следующим исключением:

<�Код> NullReferenceException. Ссылка на объект не установлена ​​в экземпляр объекта.

Мой web.config выглядит так:

  

  
    
  
  
    
    
  
  
    <trustedIssuers>
      
    
  
  
    
  
  

Может кто-то пролить свет на то, как использовать метод Bootstraptoken для получения токена ACS?

благодаря Луис

1
nl ja de

2 ответы

Вы пробовали это:

BootstrapContext bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as BootstrapContext;                                  
SecurityToken st = bootstrapContext.SecurityToken;

Take a look on Vittorio's post: http://blogs.msdn.com/b/vbertocci/archive/2012/11/30/using-the-bootstrapcontext-property-in-net-4-5.aspx

0
добавлено
Нет, у меня нет. В моих ID-процедурах используется .NET 4.0 (Microsoft.identitymodel), но я увижу, будет ли их обновление не слишком много хлопот. благодаря
добавлено автор Luis Delgado, источник

Я не считаю, что федеративная аутентификация по умолчанию устанавливает HttpContext.User. Пытаться

(Thread.CurrentPrincipal as IClaimsPrincipal).Identities[0].BootstrapToken

Предполагая, что вы прошли через конвейер обработчика маркеров (WS-FAM) на своем сайте, это должно быть заполнено. Это будет объект SecurityToken, который затем можно сериализовать с помощью соответствующего класса SecurityTokenHandler.

0
добавлено
Привет, Орен, спасибо за ответ. Этот код совпадает с тем, который был опубликован в примере ACS инструментария Windows 8. Интересно, если я возьму проект этого образца и запустил его, он будет работать. Однако мой код (как указано выше) не работает с указанным исключением. Я предполагаю, что есть что-то не правильно Настройка моего проекта MVC по сравнению с загруженным образцом, но я не смог выяснить, что ...
добавлено автор Luis Delgado, источник
У вас настроен WSFederationAuthenticationModule? msdn.microsoft.com/en-us/library/ & hellip;
добавлено автор Oren Melzer, источник
Про Windows
Про Windows
941 участник(ов)

Microsoft Windows и всё, что с этим связано. Список интересных групп и каналов: https://github.com/goq/telegram-list

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot