我有这个 Cloudshare环境 组成3的机器:

  • 一个对Sharepoint2013年(这是我的发展与VS2012安装)
  • 另一个SQL服务器2012年
  • 和另一对活动目录

我试图创建一个基本的高度信任的应用程序对Sharepoint2013年使用的服务器协议。

我们遵循若干指导:

当我运行的项目(默认的模板代码)从VS和信任的程序,我得到一个例外在以下行:

Uri hostWeb = new Uri(Request.QueryString["SPHostUrl"]);

using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity))
{
    clientContext.Load(clientContext.Web, web => web.Title);
    clientContext.ExecuteQuery(); // throws exception
    Response.Write(clientContext.Web.Title);
}

在默认。aspx。cs

该例外可能是以下任一特性:

远程服务器返回一个错误:(403)禁止的。

远程服务器返回一个错误:(401)未经授权的。

我已经尝试了几种排除与未成功。我不是一个SP2013专家,因此任何帮助,将不胜感激。

感谢

更新

这里的承载日志条目有关的请求:http://pastie.org/pastes/8395956/text

有帮助吗?

解决方案

为简单起见,我将国家的显而易见的!

用户未经过身份验证和资源要求身份验证

这告诉我有财产以后的错你的手发抖(证书未发送或是错误),作为其微软的产品,最好的地方是看msdn。

为了明确这一请读这样的:

下面的步骤是任选的。然而,我们建议你发展 和测试用HTTPS功。关闭HTTPS可能会因为你的作为 开发近的某些问题当建立一个应用程序,将会发生 在生产部署在HTTPS是必需的。

现在你读的注意,阅读问题,你有!

保护身份验证,现在需要SharePoint运行HTTPS,不仅为您服务 但也对SharePoint2013年。你会得到一个403(禁止)消息 当尝试打电话给SharePoint通过使用一个测试 证书。

在计算机,你有SharePoint2013年安装的,你可以打开 关HTTPS要求在开发期间通过使用下 Windows PowerShell命令.

所以这就是你的问题就在那里!得到周围的同时开展这样做:

这在powershell用于测试/发展:

$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $true
$serviceConfig.Update()

一旦完成其返回到它是如何!

$serviceConfig = Get-SPSecurityTokenServiceConfig
$serviceConfig.AllowOAuthOverHttp = $false
$serviceConfig.Update()

现在我还要注意:

在高信任程序,也没有下令牌,甚至如果你使用 appredirect.aspx文件。下令牌的具体配置 使用Windows Azure访问控制服务(ACS)。然而,一个 接入令牌仍然是必需的。 如果您使用的是高信任 配置,你的网页应用程序用户进行身份验证中 同样的方式,SharePoint2013年会(即,程序是 负责创建的用户部分的接入令牌)。

你使用的tokenhelper类clientcontext?

        using (var clientContext = TokenHelper.GetS2SClientContextWithWindowsIdentity(hostWeb, Request.LogonUserIdentity))
        {
            clientContext.Load(clientContext.Web, web => web.Title);
            clientContext.ExecuteQuery();
            Response.Write(clientContext.Web.Title);
        }

还究竟是什么你想做正如你可能需要更多的权限取决于你做什么!

访问的其他属性,可能需要请求的权限 主网络。

http://msdn.microsoft.com/en-us/library/fp179901.aspx

希望上述的回答你的问题!你需要确保上述被正确地完成它的工作!


如果这仍然是一个问题比其财产以后是错误的guid颁发vs2012,这是自动发送按F5时,这是设置在网络。config在这一行:

<add key="IssuerId" 

改变guid从上的情况下以下情况:

自:

<add key="IssuerId" value="F2AE6B96-1FC0-43C6-B5D0-900117C491A4"/>

<add key="IssuerId" value="f2ae6b96-1fc0-43c6-b5d0-900117c491a4"/>

很明显你的guid是要以不同于以上;)

还要注意你需要一个独特的证书,每个个体应用程序!还确认guid是一样的powershell guid使用 Get-SPTrustedSecurityTokenIssuer 应该是一样的网络。config!

http://www.jamestsai.net/Blog/post/SharePoint-Provider-Hosted-App-401-Unauthorized-error-on-clientContextExecuteQuery().aspx

更新

只是看着你的记录文件!

要打破它,它无法直接与认证!什么方法你们使用?ntlm?kerbos?等...

这是基本要知道如何你已经安装的你的农场和认证!

现在可能有几个问题会在这里看起来的错误!我建议你读通过以下链接!我会强烈建议,一旦你有读取的链接,如果所有的是正确的在你的设置运行 New-SPTrustedSecurityTokenIssuer 这个例子中可以发现在我的最后一个链接页面的底部!这可能会解决你的问题的令牌的一部分和正确的握手之间的两台服务器(验证每个其他)。

1)令牌不是被送由于安全设置,都不兼容!

如果您使用的Windows的权利要求的模式用户的认证和 网络应用程序配置为使用仅Kerberos身份验证 没有回落到NTLM作为身份验证协议,则程序 认证不起作用。

http://technet.microsoft.com/en-us/library/ee806870.aspx

或/和

2)使用服务器验证,这是它可能会走错了!有你的档案了同步??

2013年的服务器,确保组成员身份是同步的,与用户配置文件服务应用程序。

如果一个用户配置文件存在对于用户和相关的组成员 不是同步的,访问可能会被拒绝时的用户是应该 授予访问对于给定资源。因此,确保 小组成员身份是同步的,与用户配置文件服务 应用程序。

http://technet.microsoft.com/en-us/library/jj219806.aspx

现在这是需要服务器安装工作!

服务器验证允许服务器,都能够 服务器验证访问和请求的资源 另一个代表用户。因此,服务器运行 SharePoint服务器2013和服务进入的资源要求 必须能够完成两个任务:

再水合用户的身份,服务器可以执行 服务器验证请求访问SharePoint 资源。SharePoint服务器2013年需要的要求从来 安全令,并解决它的一个具体SharePoint用户。通过 默认的、SharePoint服务器2013使用建筑中的用户配置文件服务 应用程序解决的身份。

与上述的结果是:

如果一个用户配置文件和相关的组成员身份的用户 不同步,SharePoint服务器2013年可能会错误地拒绝访问 到一定的资源。因此,确保组成员身份 同的用户配置文件服务应用程序。For Windows 权利要求,用户配置文件服务应用程序进口的四个关键用户 属性和前面所描述的组成员身份。

http://technet.microsoft.com/en-us/library/jj729797.aspx

点是标记和认证工作不正常,因为你设置错误的安全类型或配置!知道你做了什么会确定其打算错了!显然它看起来像服务器验证是被拒绝作为标记是不会发送正确。

如果你相信的认证协议是正确的比,可以按照本指南一旦你已经看了上面的链接:

http://technet.microsoft.com/en-us/library/jj655400.aspx

链接上述解释并展示了服务器的步骤的具体senarios

创建一个信任之间的两台服务器(创建了一个信托之间的一个服务器服务的主体。)

按照本指南!使用 New-SPTrustedSecurityTokenIssuer

http://technet.microsoft.com/en-us/library/jj219695.aspx

对不起长的文本和许多联系!作为其服务器和日志的通用/安装,我可以给你一个明确的答案!但是我知道的是的握手之间的两台服务器将会错意味着你已经错过了财产以后出具的初始安装!链接上应该有希望解决你的问题之间的握手传递正确的凭据正常工作!

其他提示

我有类似的问题。我不使用clientcontext或tokenhelper,我切换到您可以在此处阅读的新SharePointContext: http://blogs.mofollive/2013/kaevans/acrive/2013/09/24/introduting-sharepointcontext-for-providered-sharepoint-apps.aspx

一旦我制作了这个开关,我的401和403问题就消失了。新的SharePointContext使用底层的托克纳赫尔,因此请确保您拥有最新版本的Tokenhelper文件。

我想我知道你的问题是什么,服务器日志指向客户端/服务器机器没有时间同步。

"SPApplicationAuthenticationModule: No valid access token exists in the Authorization header, you should see a 401 challenge as a response to this request."

"SPSecurityTokenExtensions: Not Valid Before:10/11/2013 21:15:38, Valid To:09/06/2015 07:55:38."
.

我遇到了类似的误差,几天后,分辨率是让服务器和客户端计算机时间同步。

Foundation  Application Authentication ajezq High SPApplicationAuthenticationModule: 
Error authenticating request, Error details: 
Header: 3000002;reason="The access token has expired.
It's valid from '4/29/2015 2:50:44 PM' and to '4/30/2015 2:50:44 AM'.";
category="invalid_client", Body: {"error_description":"Invalid JWT token. The token is not yet valid. 
Current time is 4\/29\/2015 10:44:25 AM and the token is Valid from 4\/29\/2015 2:50:44 PM."}  
.

许可以下: CC-BY-SA归因
scroll top