2013-06-20 11 views
3

У меня есть 365 счета (Office, используя последний экземпляр SharePoint 2013)Многократное ClaimsPrincipal для проверки подлинности Sharepoint Online

У меня также есть простой .net веб-приложение, которое аутентификацией против Office 365, я создал AppPrincipalId и добавил он использует команду New-MsolServicePrincipal powershell commmand.

Это работает правильно. Я запускаю приложение (в отладке), он перенаправляет на логин 365, я вхожу в систему, он возвращается в приложение, и я получил класс из ClaimsAuthenticationManager и переопределяет метод аутентификации.

теперь я могу видеть ClaimsPrincipal с соответствующими претензиями и идентичности и т.д.

Теперь я хотел бы повторно использовать этот идентификатор для программного доступа к SharePoint.

Мои вопросы:

а) Будет ли SharePoint разрешить эту идентичность (видя, что он был выдан sts.windows.net)

б) Как я могу восстановить действительный JWT (или использовать существующий), и инкапсулировать это в HttpRequest, используя носитель аутентификации.

Код, который я использую, ниже - это возврат 401 не разрешен.

Любая помощь будет высоко оценена.

public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal) 
    { 
     if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true) 
     { 

      List<Claim> claims = null; 
      claims = (from item in incomingPrincipal.Claims 
         where item.Type.StartsWith("http", StringComparison.InvariantCultureIgnoreCase) 
         select item).ToList(); 

      RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider(); 
      byte[] keyForHmacSha256 = Convert.FromBase64String("Gs8Qc/mAF5seXcGHCUY/kUNELTE="); 

      // Create our JWT from the session security token 
      JWTSecurityToken jwt = new JWTSecurityToken 
      (
       "https://sts.windows.net/myAppIdGuid/", 
       "00000003-0000-0ff1-ce00-000000000000", // sharepoint id 
       claims, 
       new SigningCredentials(
        new InMemorySymmetricSecurityKey(keyForHmacSha256), 
        "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256", 
        "http://www.w3.org/2001/04/xmlenc#sha256"), 
       DateTime.UtcNow, 
       DateTime.UtcNow.AddHours(1) 
      ); 

      var validationParameters = new TokenValidationParameters() 
      { 
       AllowedAudience = "00000003-0000-0ff1-ce00-000000000000", // sharepoint id 
       ValidIssuer = "https://sts.windows.net/myAppIdGuid/", // d3cbe is my app 
       ValidateExpiration = true, 
       ValidateNotBefore = true, 
       ValidateIssuer = true, 
       ValidateSignature = true, 
       SigningToken = new BinarySecretSecurityToken(Convert.FromBase64String("mySecretKeyFromPowerShellCommand")), 
      }; 

      JWTSecurityTokenHandler jwtHandler = new JWTSecurityTokenHandler(); 
      var jwtOnWire = jwtHandler.WriteToken(jwt); 
      var claimPrincipal = jwtHandler.ValidateToken(jwtOnWire, validationParameters); 
      JWTSecurityToken parsedJwt = jwtHandler.ReadToken(jwtOnWire) as JWTSecurityToken; 

      HttpWebRequest endpointRequest = 
       (HttpWebRequest)HttpWebRequest.Create(
       "https://MySharepointOnlineUrl/_api/web/lists"); 
          endpointRequest.Method = "GET"; 
          endpointRequest.Accept = "application/json;odata=verbose"; 
          endpointRequest.Headers.Add("Authorization", 
           "Bearer " + parsedJwt.RawData); 
          HttpWebResponse endpointResponse = 
           (HttpWebResponse)endpointRequest.GetResponse(); 

     } 
    } 

ответ

2

Если ваш сценарий посвящен потреблению данных SharePoint Online из удаленного веб-приложения, вы, вероятно, захотите использовать поток OAuth. Вы не можете генерировать токен самостоятельно. Вместо этого вы запрашиваете согласие на доступ к определенным областям (ресурс + разрешение). Эти две ссылки должны помочь

http://msdn.microsoft.com/en-us/library/office/apps/jj687470(v=office.15).aspx http://jomit.blogspot.com.ar/2013/03/authentication-and-authorization-with.html

+0

Матиас - ты указал мне в правильном направлении! У меня теперь есть рабочий прототип, большое спасибо – Phil