ACCESS至于怎样在Android、Java等非微软平台上建立高信任的SharePoint应用程序

至于怎样在非微软平台达成确立高信任的SharePoint应用程序

原文
:http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sharepoint-apps-on-non-microsoft-platforms.aspx

1.前言

 

开业明之,哥无代码发布,也不提供解决方案。
我只是说明以非微软技术平台达成确立亚信任或是高信任应用程序是好自由之(PS:也是生痛苦的)。
作为一个微软技术的研发者,我吗增长时尚未写Java或是PHP代码了,文中吾力所不及给各一样栽平台建立示例代码,抛砖以引玉吧。

当你错过立一个SharePoint 2013应用程序时,Visual Studio
2013,会被你挑:

1、使用Azure
ACS

2、使用一个证

 

ACCESS 1

此选项就象征当讯问,目标 SharePoint
服务器场如何定义信任设置,并把相关安装保存于Web.config文件中。要么你用没有信任ACS设置“client
ID”和”client secret”或是使用高信任来安装”client ID”
、”证书路径”和“证书密码”。

2.理解OAuth和信任

经这PodCast, Office 365 Developer Podcast: Episode 002 with Radi
Atanassov,
Radi 详述了SharePoint 使用OAuth ,并且将它们像地称为 “三角验证”
,当把用设置成采取Azure
ACS的下,应用得去跟ACS通信,提供一个“Refresh
Token”,并且取得一个Access Token, “Refresh Token”
是应用程序从SharePoint 的服务器取得的,但以此”Refresh Token” 也是Azure
ACS 之前发给SharePoint的。在这个模式下, 应用程序和SharePoint服务器,
不直相信对方,而是经过Azure ACS 建立两少于亲信关系,
所以我们被就“低信任”.  如果要是又进一步了解这种“OAuth舞步”, 去是URL
看咱们的2013 session, Understanding Authentication and Permissions with
Apps for SharePoint and
Office, 

ACCESS 2

小信任模型既可以给Office 365运啊得以叫单独的SharePoint
2013服务器使用。

但是残酷之切实可行,总是有!很多客户从没主意去装企业中间的SharePoint
2013以及Azure ACS通信,因为Azure ACS是微软的服务器,(企业里的SharePoint
2013休容许连接外网,就算SharePoint
2013足连外网有些国家吗发防火墙不允许看国外一些网站)。很好!产品团队于是可以免拣Azure
ACS,作为专业人士的我们吧如理解,对于OAuth 2.0来说,Azure
ACS实现了S2S协议那可微软王国标准的OAuth
2.0作法,那是发国际则的。在“高信任”的证实方案里,
因为我们着想到SharePoint 服务器和APP
是2独雅铁的弟兄,不待第三正值去保险什么。APP
使用X.509证书去让“TOKEN”签名,然后SharePoint 再指向这个签字进行信任。

“高信任”,并无意味着“高授权”,不是说APP可以一直去去或干掉服务器里的物,“授权”还是经过运用APP的这个人口来决定的。
只不过APP可以操纵OAuth2 access
token
始建的历程,不需要微软的ACS服务器来搞定。SharePoint
场的领队使用公钥注册一个“深信的安全TOKEN颁发者
SPTrustedSecurityTokenIssuer, 然后App 使用此证之利己钥
签名,正因私钥的特色,所以 SharePoint 会信任是APP。
ACCESS 3

可爱的凡独自的服务器可以选择2啊,而Office
365的APP是无主意使“高信任” 模式之,
因为当一个微软开发者的若,黑不交OFFICE 365底服务器里去创造证书!.

再说了:人家微软的Office
365请勿相信微软的ACS服务,难道信任而的APP不成为。

3.比不上信任APP与非微软平台

 如果你出基于Office
365之次序及,哥劝你就是一直运用“低信任APP”,这为简单,对于APP开发者的乃也管签名发证书的事体,在网页上申请Client
ID和 Client
Secret后,在公的代码里虽是描写几独程序保存一Token之类,就实行了。网上这种文章,多设牛毛,例如:1.
Todd Baginski 对于Node.js 上付出SharePoint
作了老大了不起的演讲。也揭示了演示PHP操纵SharePoint 2013 SharePoint 2013:
Perform operations on SharePoint Document Library from PHP
site. 于是模型里,要因此到
JWT library 库去解析 由 SharePoint 发给你的context token ,过程即是赢得
ACS URL, 把Refresh token 提交去赢得access token.

2.
一模一样,对于你自主的SharePoint网站创建一个不如信任APP也是异常有或的,下面的稿子算好用的作:如何以Office
365夺证明一个独立SharePoint 网站的提供商承APP。

How to: Use an Office 365 SharePoint site to authorize provider-hosted
apps on an on-premises SharePoint
site. 

于这模型里,你创造一个Office365之tenant,然后创建一个亲信从君的服务器到Office
365的服务器,你无欲对Office 365做任何配置,你就是得它去念取Azure
ACS给您准备的命名空间。一可配备好,无论她是无是微软平台,你不怕可动用Client
ID和Client Secret.
在自主的SharePoint服务场配置了后,你无需操心管理X.509证书或证书颁发者的题目,你也未待操心开发人员有X.509密码,可能勾的平安问题,看了这首稿子,你虽生出接触怀疑我们也啥非要弄来一个“高信任”模式吧?? 

ACCESS 4
 

  1.   创建一个ACS代理(在你的独立SharePoint 服务器场)

  2.  安装你的SharePoint的签字证书及你Office 365之tenancy.

  3.  把合格的域名在到您SharePoint
    2013场(这个会而想去运行APP),在你的Office 365
    tenancy服务之princels名称.

  4.  在你的劳动器场,创建一个APP管理代理。

卿得望见你的APP和里装有的数目还存在而自己之SharePoint服务器上,你只是采用Azure
ACS用来展开APP注册与说明,从开发者的角度来拘禁,你只是简简单单地采用了一个
client ID 和client secret, 而让你可无压力或根本不待自义就动用 JWT
libraries .  这虽是干吗我思:“低信任”
对于“高信任”来说,减少管理的纷繁真是无比的优势。4.配备高信任APP

任凭你用怎样的技术建立APP,Visual Studio 、ASP.NET MVC running on IIS
或是 Azure Web Sites,或是使用Eclipse 或是 Tomcat (Apache and Linux),
这个注册的步子,是截然同的,如下的授命必须由管理员在控制台的界面被落成,主要的目的就是做到X.509证书的信任配置:

PowerShell for High Trust Apps

  1. #Tell SharePoint
    to trust the certificate
  2. $publicCertPath = “C:\HighTrust.cer”
  3. $certificate = Get-PfxCertificate $publicCertPath
  4. New-SPTrustedRootAuthority -Name “HighTrust” -Certificate $certificate
  5.  
  6. #Get the tenant
    ID.  For on-premises default installations,
  7. #this will be
    the same as the SharePoint farm ID
  8. $spweb = Get-SPWeb “https://mysite.contoso.com”
  9. $realm = Get-SPAuthenticationRealm -ServiceContext $spweb.Site
  10.  
  11. #Specify the
    issuer ID
  12. $issuerID = “b77a601b-3133-4567-bb37-f147f61dd332”
  13. $fullIssuerIdentifier = $issuerId + ‘@’ + $realm
  14.  
  15. #Create a
    trusted security token issuer based on the certificate
  16. New-SPTrustedSecurityTokenIssuer -Name “Contoso S2S HighTrust
    Apps” -Certificate $certificate -RegisteredIssuerName $fullIssuerIdentifier IsTrustBroker
  17.  
  18. #IISRESET is
    needed, otherwise settings won’t be applied for 24 hours
  19. iisreset

 

全然的布置步骤,可以参见如下的稿子:

 “How to: Create high-trust apps for SharePoint 2013 (advanced
topic)”. 这个APP将会使证书,证书密码以及披露的ID去得到一个ACCESS
TOKEN, Visual Studio提供了这么的工具去得这个。

ACCESS 5

 

但难过呀!
非微软的主次,必须使错过管理这些价值,以去得到Access Token。

4. JWT Tokens

SharePoint 使用JWT tokens 来进行OAuth认证。可别吃这英文“token”
吓坏你这个好基友了,你便管此东东真是大大大(此处省略127字)
复杂的加密方式.  JWT tokens 是 JSON 对象, 这意味其就是是name-value
pairs这种形式,感兴趣而可读读 The JWT specification
draft 。

被SharePoint 的 access token 再介绍一不善好了!再说一样糟糕! 她就JWT
token, 

怎么样你还惦记打听它们, 可以读读这啊! “Creating a Fiddler Extension for
SharePoint 2013 App
Tokens”. 

ACCESS 6

面可以观看该公开就是同样针对对键-值,它起12小时的有效期,取得后若便得“为所需要为”哦。。。。。。具体内容
如下表所示:

aud Audience.  The value is 00000003-0000-0ff1-ce00-00000000/<hostname>@<realm*>  .    The hostname is the FQDN of the web application root or the host-header site collection root.  The realm is the GUID that represents the SharePoint tenant.
iss Issuer. <IssuerID>@<realm*>. The issuer ID is obtained when you register the SPTrustedIdentityTokenIssuer. The realm is the GUID that represents the SharePoint tenant.
nbf Not before. The Unix epoch time upon which the token started being valid.
exp Expires. The Unix epoch time upon which the token expires.
nameid The identifier for the user (more info below)
nii The identity provider used to rehydrate the user.  One of the values:
urn:office:idp:activedirectory
urn:office:idp:forms:membershipprovidername
trusted:samlprovidername (as noted in Steve Peschka’s example below, this is what is actually configured as opposed to the documentation)
actortoken The token for the application.

\ 现实还要是可爱的,当你安装了SharePoint 2013, 只出一个tenant ID,
realm与SharePoint farm ID又平等,可以通过PowerShell的下令:*

Get -SPFarm | select ID 得到。

下我们又搞定:actortoken.  这与outer token相反,actortoken
标识的是APP.

aud Audience.  The value is 00000003-0000-0ff1-ce00-00000000/<hostname>@<realm*>  .    The hostname is the FQDN of the web application root or the host-header site collection root.  The realm is the GUID that represents the SharePoint tenant.
iss Issuer.  <IssuerID>@<realm*>.  The issuer ID is obtained when you register the SPTrustedIdentityTokenIssuer.  The realm is the GUID that represents the SharePoint tenant.
nbf Not before.  The Unix epoch time upon which the token started being valid.
exp Expires. The Unix epoch time upon which the token expires.
nameid Identifier for the app.  <Client ID>@<realm>.  The client ID uniquely identifies your app, this is provided by using AppRegNew.aspx or provided when registering an app in the Office Marketplace.

Inner token, outer token…太奇怪了,哥就未翻译了,以免又蹭了, 看例子!
我们自家要使用这些价值,这样好掌握一些,同样我们达成例被之示例值,也是相同的:

SharePoint site mysite.contoso.com
SharePoint realm ID 6305dc22-8cb8-4da3-8e76-8d0bbc0499a5
SPTrustedSecurityTokenIssuer issuer ID b77a601b-3133-4567-bb37-f147f61dd332
Client ID 06d847ca-011f-4965-ac1f-5ad14740ad89

末段, 解码TOKEN的代码我们采用了上例的示例值:

Sample Access Token Body

  1. {
  2.     aud:    00000003-0000-0ff1-ce00-000000000000/mysite.contoso.com@6305dc22-8cb8-4da3-8e76-8d0bbc0499a5,
  3.     iss:    b77a601b-3133-4567-bb37-f147f61dd332@6305dc22-8cb8-4da3-8e76-8d0bbc0499a5,     
  4.     nameid:
    s-1-5-21-3304015898-3601453682-3711364722-500,
  5.     nii:    urn:office:idp:activedirectory,        
  6.     nbf:    1320176785,     
  7.     exp:    1320219985,             
  8.     actortoken:     
  9.     {         
  10.         aud:        00000003-0000-0ff1-ce00-000000000000/mysite.contoso.com@6305dc22-8cb8-4da3-8e76-8d0bbc0499a5,
  11.         iss:        b77a601b-3133-4567-bb37-f147f61dd332@6305dc22-8cb8-4da3-8e76-8d0bbc0499a5,         
  12.         nameid:     06d847ca-011f-4965-ac1f-5ad14740ad89@6305dc22-8cb8-4da3-8e76-8d0bbc0499a5,                        
  13.         nbf:        1320176785,         
  14.         exp:        1320219985,                          
  15.           trustedfordelegation:
    true
  16.     }
  17. }

瞧你便见面清楚,拆开内容中没多少变量。

ACS模式的 S2S 协议号称是正式的 OAuth 2.0 模型,你啊得参见学习下:
[MS-SPS2SAUTH]: OAuth 2.0 Authentication Protocol: SharePoint
Profile.

5.”高信任”APP 与非微软平台

吓吧,兄弟是自身误导而了,你如这么还以坚持用“高信任”APP,有些工作自己还得跟公交待清楚。
如果您无在微软平台下开发这种APP,你会意识搜索全MSDN你都没有没有产生主意找到一个勿应用TokenHelper.cs,的例证。而文件被的切近,有巨长的代码,你根本无法把此东东改建成为非微软的等同平台的代码。

TokenHelper.cs,真正的企图在于帮助你失去解码和加密Jwt
TOKEN。

当您创造一个新的APP,如果您采取Visual Studio
,它见面自动很轻地自动化地赞助你填上有有关的 OAuth 对象与价值的哎的。

其一近乎就是TokenHelper.cs,它就有办法可为您通过Azure ACS 来使用“低信任”
apps,也时有发生道去落实“高信任”

Windows Identity

  1. public static string
    GetS2SAccessTokenWithWindowsIdentity(
  2.     Uri
    targetApplicationUri,
  3.     WindowsIdentity
    identity)
  4. {
  5.     string realm = string.IsNullOrEmpty(Realm) ?
    GetRealmFromTargetUrl(targetApplicationUri) :
    Realm;
  6.  
  7.     JsonWebTokenClaim[] claims = identity
    != null ?
    GetClaimsWithWindowsIdentity(identity) : null;
  8.  
  9.     return
    GetS2SAccessTokenWithClaims(targetApplicationUri.Authority, realm,
    claims);
  10. }

点的道接受一个WindowsIdentity,然后创建一个Access token。
因为这个方式是接到WindowsIdentity的,它看起不像足叫非微软技术平台所用,但是咱看里面所用之是法:GetClaimsWithWindowsIdentity,
没有呀特别的同呀!!!

Claims Identity

  1. private static JsonWebTokenClaim[]
    GetClaimsWithWindowsIdentity(WindowsIdentity
    identity)
  2. {
  3.     JsonWebTokenClaim[] claims = new JsonWebTokenClaim[]
  4.     {
  5.         new JsonWebTokenClaim(NameIdentifierClaimType,
    identity.User.Value.ToLower()),
  6.         new JsonWebTokenClaim(“nii”, “urn:office:idp:activedirectory”)
  7.     };
  8.     return
    claims;
  9. }

代码所做的,无非就是是加了2只claim
,第1独受nameid,它的价值是sid,第2单叫nil,
告诉SharePoint如何错过管nameid值映射到一个identity
provider,在这个场面下,nil值就是“urn:office:idp:activedirectory”.  
参数“nameid” 和“nii” 对SharePoint是特定的, 你可拿当下2单声明(claim)加至
the JWT token.

6.值从哪来

TokenHelper.cs 是Visual
Studio生成的,如果您使用另外的阳台,你尽管得改造. 
值到哪里去的题材我们上等同节就搞定,现在咱们虽打出定值从乌来的题材。

issuerid

当你创造注册SPTrustedSecurityTokenIssuer时,issuer ID就挺成了,这是 GUID
全部小写.

Client ID

乃通过 AppRegNew.aspx 注册APP时填写的也许自动生成的。

realm

走访SharePoint 网站的如下url: “/_vti_bin/client.svc”
,在走访的时候增长这个的HTTP head: “Authorization: Bearer “. 
参考TokenHelper.cs中的办法:

Obtaining the Realm

  1. public static string
    GetRealmFromTargetUrl(Uri
    targetApplicationUri)
  2. {
  3.     WebRequest request = WebRequest.Create(targetApplicationUri +
    “/_vti_bin/client.svc”);
  4.     request.Headers.Add(“Authorization: Bearer
    “);
  5.  
  6.     try
  7.     {
  8.         using
    (request.GetResponse())
  9.         {
  10.         }
  11.     }
  12.     catch (WebException e)
  13.     {
  14.         if (e.Response == null)
  15.         {
  16.             return null;
  17.         }
  18.  
  19.         string bearerResponseHeader =
    e.Response.Headers[“WWW-Authenticate”];
  20.         if (string.IsNullOrEmpty(bearerResponseHeader))
  21.         {
  22.             return null;
  23.         }
  24.  
  25.         const string bearer = “Bearer realm=\””;
  26.         int bearerIndex =
    bearerResponseHeader.IndexOf(bearer, StringComparison.Ordinal);
  27.         if (bearerIndex
    < 0)
  28.         {
  29.             return null;
  30.         }
  31.  
  32.         int realmIndex =
    bearerIndex + bearer.Length;
  33.  
  34.         if
    (bearerResponseHeader.Length >= realmIndex +
    36)
  35.         {
  36.             string targetRealm =
    bearerResponseHeader.Substring(realmIndex, 36);
  37.  
  38.             Guid
    realmGuid;
  39.  
  40.             if (Guid.TryParse(targetRealm,
    out
    realmGuid))
  41.             {
  42.                 return
    targetRealm;
  43.             }
  44.         }
  45.     }
  46.     return null;
  47. }

上述代码很粗略,转成为你的平台的代码就执行了,对于O365吧,它设计虽叫广大云用户以的,realm对各一个云用户是差的。 

稍微意思:
如果您以“低信任”APP那节,配置了公的服务器和O365服务器之间的亲信的话,realm的价是转的啊。

nameid and niia

当配置“高信任” apps, MSDN 文档声明Web Application 必须下 Windows
Authentication.  记住在您的APP和SharePoint之间唯一的安的通信就是JWT
token在验证的头“Bearer
”,这是透过SSl传送的。当当TokenHelper中之代码用WindowsIdentity所举行的唯一事情就是取SID,没有别的对象。所以,唯一的理由APP的Web
Application要求祭Windows
验证措施,就是为安为TokenHelper.cs使用WindowsIdentity
对象获得用户之SID. 
你得改变TokenHelper.cs具体做法使用任何方式得到用户之SID.

前一节 “JWT Tokens” 介绍了nameid (outer token) 它的价是 SID, 从一个
WindowsIdentity 对象得到. 
作为非微软技术大拿的弟兄你怎样去做,得到使用者的SID 呢?

  1. 使LDAP 这个模型去打Active Directory得到信息. 

一个弟兄用PHP搞定他了,您可看看: PHP – Get users SID from Active
Directory via
LDAP. 

  1. 一旦此用户并无是AD中之怎么处置? 我们可以行使 ADFS 或是 Ping 或是
    其它一些 SAML provider,  我特意好这法子,你可从我的做法,这之所以到
    FBA 、SAML claims  Steve Peschka 有成文, Using SharePoint Apps with
    SAML and FBA Sites in SharePoint
    2013,这是采取
    SAML or FBA 用户来说,这个办法怎么形容。

Assert the user identity

  1. private static JsonWebTokenClaim[]
    GetClaimsWithClaimsIdentity(
  2.     System.Security.Principal.IPrincipal
    UserPrincipal,
  3.     IdentityClaimType
    SamlIdentityClaimType, TokenHelper.ClaimsUserIdClaim id,
  4.     ClaimProviderType
    IdentityClaimProviderType)
  5. {
  6.  
  7.     //if an identity claim
    was not found, then exit
  8.     if (string.IsNullOrEmpty(id.ClaimsIdClaimValue))
  9.         return null;
  10.  
  11.     Hashtable claimSet = new Hashtable();
  12.  
  13.     //you always need nii
    claim, so add that
  14.     claimSet.Add(“nii”, “temp”);
  15.  
  16.     //set up the nii claim
    and then add the smtp or sip claim separately
  17.     if
    (IdentityClaimProviderType ==
    ClaimProviderType.SAML)
  18.         claimSet[“nii”] = “trusted:” +
    TrustedProviderName.ToLower();  //was
    urn:office:idp:trusted:, but this does not seem to align with what
    SPIdentityClaimMapper uses
  19.     else
  20.         claimSet[“nii”] = “urn:office:idp:forms:” +
    MembershipProviderName.ToLower();
  21.  
  22.     //plug in UPN claim if
    we’re using that
  23.     if (id.ClaimsIdClaimType
    == CLAIMS_ID_TYPE_UPN)
  24.         claimSet.Add(“upn”,
    id.ClaimsIdClaimValue.ToLower());
  25.  
  26.     //now create the
    JsonWebTokenClaim array
  27.     List<JsonWebTokenClaim>
    claimList = new List<JsonWebTokenClaim>();
  28.  
  29.     foreach (string key in
    claimSet.Keys)
  30.     {
  31.         claimList.Add(new JsonWebTokenClaim(key,
    (string)claimSet[key]));
  32.     }
  33.  
  34.     return
    claimList.ToArray();
  35. }

 

达到例被,它参加了 nameid 和nii 2只声明, nameid 被射到了 UPN, email,
或是SIP.  在篇章被,它讲吗当即3只属性之详尽意图. 如何你的SharePoint
服务器使用 FBA 或是 SAML 来声称用户, 这个资源对您用大实惠!
最关键之是,这会变本加厉你针对“高信任”模式APP中怎么样使用户配置文件服务之关键理解。
User Profile Service
Application也大关键哦,兄弟你产生趣味多多研究下2首吧!

SharePoint 2013 User Profile Sync for Claims
Users

OAuth and the Rehydrated User in SharePoint 2013 – How’d They do That
and What do I Need to
Know

巧以咱们的APP运行于各种不用的平台上,甚至使不用的认证架构所有特别不便保证用户还是动AD的,既然SharePoint可以以不同之用户那么您的次为理应配合,不是嘛?

 

7. X.509证书

当您创造一个“高信任”APP,如果您利用Visual Studio
,你必提供一个途径去死成一个证书与证件密码,X.509 证书用于对Access
Token进行签字。这个签名就如Oauth2的客户密码(client
secret)的企图一样,在老大高档别Json对象序列化成一个字串,这个字串是base64
Url编码的,然后重新下签名。 同样的步子,在咱们下ACS
验证方式时为出,不过这时用于签名的凡client
secret,所以您当好找到一个库用来形成JWT
token然后还能开展签约的操作(当然是X.509)。

Visual Stdio 程序会当创立APP时,自动地引用
Microsoft.IdentityModel.Extensions. 我动用反编工具Telerik JustDecompile
反编了 Microsoft.IdentityModel.Extensions 我用Visual Studio 2013
创建以证书之SharePoint APP 的档次,
移除了Microsoft.IdentityModel.Extensions, 添加上自己好之
Microsoft.IdentityModel.Extensions项目.  下面就 JWT token
创建与签署再拓展一些扩展.

手续似乎是这样:

  1. JWT token 有2个组成部分:头、正文.  头指示了它的类型 (JWT) 和算法,
    正文就如我们前说之 access token那样 之间因此点分隔 “.”
  2. 头被编码成JSON, 编码方式:base64UrlEncoded.
  3. 正文被编码成JSON, 编码方式:base64UrlEncoded.
  4. 2只base64UrlEncoded 值使用点连接 “.”
  5. 结果使用 X.509 证书,使用RSA SHA256 签名算法,和SHA256 数字到底法.
  6. 达成亦然步结果连续拓展base64URLEncoded编码
  7. 第 4 步结果排在第6步结果前, 用点连接 “.”

立即来硌代码,让您可解是过程:

Code Snippet

  1. IDictionary<string, string> headerClaims =
    jwt.CreateHeaderClaims();
  2. IDictionary<string, string> payloadClaims =
    jwt.CreatePayloadClaims();
  3.                         
  4. string encodedHeader = Base64UrlEncoder.Encode(headerClaims.EncodeToJson());
  5. string encodedBody = Base64UrlEncoder.Encode(payloadClaims.EncodeToJson());
  6.             
  7. string formattedClaims =
    string.Format(CultureInfo.InvariantCulture,
    “{0}.{1}”, encodedHeader,
    encodedBody);
  8. string encodedSignature =
    this.Sign(formattedClaims,
    jwt.SigningCredentials);
  9.  
  10. return string.Format(CultureInfo.InvariantCulture,
    “{0}.{1}.{2}”, encodedHeader,
    encodedBody,
    encodedSignature);

顿时边的“jwt.SigningCredentials” 是什么?  你看
TokenHelper.cs,就了解这虽是  X.509 证书. 在你的阳台上,
你得一个密码及私钥去变通结果。 

Code Snippet

  1. private static readonly string
    ClientSigningCertificatePath = WebConfigurationManager.AppSettings.Get(“ClientSigningCertificatePath”);
  2. private static readonly string
    ClientSigningCertificatePassword = WebConfigurationManager.AppSettings.Get(“ClientSigningCertificatePassword”);
  3. private static readonly X509Certificate2 ClientCertificate =
    (string.IsNullOrEmpty(ClientSigningCertificatePath)
    || string.IsNullOrEmpty(ClientSigningCertificatePassword))
    ? null : new X509Certificate2(ClientSigningCertificatePath,
    ClientSigningCertificatePassword);
  4. private static readonly X509SigningCredentials SigningCredentials =
    (ClientCertificate == null) ? null : new X509SigningCredentials(ClientCertificate,
    SecurityAlgorithms.RsaSha256Signature,
    SecurityAlgorithms.Sha256Digest);

进程我们得以用图形指示如下:

 

ACCESS 7

X.509 证书 ,在如一下地方同:
注册token、创建APP、导出公钥到Sharepoint、SharePoint服务器管理登记SPTrustedSecurityTokenIssuer. 
要叫SharePoint和 非微软技术和谐共生“high trust” 模式下, 需要针对JWT token
进行正确用理解, 正确插入2独声明nii 和nameid, 对token 使用X.509
证书签名。

8.其它阳台的JWT Libraries

想开提升开发效率,工具也是不可少的.  大量的JWT libraries可用. 
试试看下面.

  • https://github.com/auth0/java-jwt –  Java
  • https://github.com/firebase/php-jwt – A PHP JWT library
  • https://github.com/michaelrhanson/jwt-js – JWT implemented in
    JavaScript, used with Node.js

 

每当自己搞东为西的研究之时节, 我留意到没对ACS验证方式:S2S实现之堆栈,
。。。。。。。

些微手真疼,没人柔柔。。。。使用“低信任” 吧,别干那么麻烦。

9.Office 365 APIs

Office 365,  挺好之O365
APIs,也对,O365 API 有无往不胜的力量去立Web Site、本地程序、 iOS、
Android和外使用O365数额的应用程序,都是透过REST APIs 和业内的 OAuth. 
就比如前我们解释的“低信任” APP 很爱采取JWT library库一样, O365
APIs也是。

否改良验证的法,现用专业的OAuth 流.  同样 TokenHelper.cs, 
微软出了Active Directory Authentication Library (ADAL) 用来深受 JWT
使用Azure Active Directory 更有益,ADAL 库提供许多办法,其中囊括获得
access token, 这样就算可知以HTTP 头中上加 “Authorization: Bearer “. 
使用时无需要考虑X.509 证书或修改现有的堆栈, 你得配备你的APP使用 Azure
Active Directory 然后调整用 O365 API. 

此文对来生充分死的研究:, Call Multiple Services with One Login Prompt
Using
ADAL,

通过利用Azure Active Directory,完成一个APP,这个APP就是一个REST 调用,
很容易改成你的阳台代码。

微软的“Microsoft Open Technologies group‘  已经确立了森有关Active
Directory Authentication Library (ADAL) 的非微软平台的库房: 

  • ADAL library for
    Java
  • ADAL library for
    Android
  • ADAL library for
    iOS
  • ADAL library for
    Node.js

设若 O365 上开发APP,
直接用这些个API吧,简单地拿部分ADAL示例转成为以上之平台的APP,那是大抵美好的同龙。

10. 总结

最好要的部分还曾深受您提了, 解码token,获得变量的价,还连 X.509
签名如何行事,也告诉您了 nameid 和nii 声明是怎么回事,

包哪些使用FBA 和SAML 的用户自身都操到了。 

消息你就是和好省吧:

JWT Specification
Draft

Understanding Authentication and Permissions with Apps for SharePoint
and Office

SharePoint 2013 User Profile Sync for Claims
Users

OAuth and the Rehydrated User in SharePoint 2013 – How’d They do That
and What do I Need to
Know

PHP – Get users SID from Active Directory via
LDAP

SharePoint 2013: Perform operations on SharePoint Document Library from
PHP
site

Using SharePoint Apps with SAML and FBA Sites in SharePoint
2013

https://github.com/auth0/java-jwt – A Java JWT library

https://github.com/firebase/php-jwt – A PHP JWT library

https://github.com/michaelrhanson/jwt-js – JWT implemented in
JavaScript, used with Node.js

ADAL library for
Java

ADAL library for
Android

ADAL library for
iOS

ADAL library for
Node.js

相关文章