我和我正在开发的团队有一个相当大的应用程序,它包含许多基于WCF NetTCP的服务.此系统将在其下运行的Windows服务不是本地帐户,而是标准域用户(在托管服务的服务器上具有管理员权限).在测试连接的过程中,我遇到了SSPI调用失败的问题.基于几个小时的研究,这导致我失去了我的客户端配置中的以下行:
<identity>
<userPrincipalName value="MACHINE\user" />
</identity>
Run Code Online (Sandbox Code Playgroud)
使用它的问题是我不使用VS或svcutil为此服务生成客户端/代理 - 正在使用的代理完全用代码编写,并且它们继承System.ServiceModel.ClientBase.我认为选择此选项的原因是我们可以使用完全相同的DataMember对象,这些对象通过栅栏两侧的服务 - 第三方组不需要连接到我们的服务,所以这不是问题.
当我没有在标准system.serviceModel配置部分中指定端点时,有没有人知道我在客户端(代码或通过配置)中设置userPrincipalName的方法?
以下是我的客户端web.config的参考资料:
<system.serviceModel>
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true"
logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
</diagnostics>
<behaviors>
<serviceBehaviors>
<behavior name="includeExceptions">
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_Default" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="Infinite" sendTimeout="01:00:00" portSharingEnabled="true" transferMode="Buffered" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
</security>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud) 我公司有一个很大的应用程序,我们正在完成.它利用WCF作为Active Directory的骨干进行身份验证.这适用于两个站点之一,因为身份验证模型是Windows,您必须成为域的一部分才能登录该站点.我的问题涉及外部可访问的其他站点.它为具有特定用户/传递的代理调用设置ClientCredentials.Windows.ClientCredential以模拟AD用户,因此完整的安全模型可以正常工作.这一切都完全符合预期.
我的问题是,在网上我可以使用HttpContext.Current.User.Identity.Name从Forms身份验证部分获取当前登录的用户,但要做到这一点,我必须确保存在一个System.Web引用我目前正在使用的DLL.我们的基础对象来自一个不了解System.Web的简单类.有没有办法找出在该基础对象项目中登录的Forms用户?我尝试过System.Security.Principal,但这只能让我从我能说的内容中访问Windows帐户,并且不会对我有任何帮助.
我知道一个选项只是引用System.Web并完成它,但这听起来真的很麻烦,而不是最好的选择,所以我希望在这里提供一些技巧.
我是很新的,以果园,现在还在试图总结我的脑袋周围所有的不同的术语,以便用断章取义这里什么也不是故意.我正在尝试做类似于此处发布的内容,但没有接受的答案.
在常规站点(非博客)中,我的客户端的图形组提供的布局有一个标题部分,然后是它下面的两列.所以,像这样:
============================================================
| Page Title |
============================================================
| Left Content | Right Content |
| | |
============================================================
Run Code Online (Sandbox Code Playgroud)
标题区域的HTML是:
<div class="page_header">
<div class="padding">
<h2 id="page_title">This is the page's title</h2>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在该块下面是更多的div,将页面的其余部分分成两列.我遇到的问题是尝试获取用户通过Orchard输入的页面标题,以显示在上面提到的部分中.我尝试将它设为一个名为PageTitle的区域,但最接近我显示的是当我为该占位符添加一个空的HTML小部件时,然后在标签中执行了@ Model.PageTitle,i.ie:
<div class="page_header">
<div class="padding">
<h2 id="page_title">@Model.PageTitle</h2>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这得到格式正确,但标题显示为"ISHAPEPROXYD0FC462A536A4DA88FD49545639B4698",我猜测是某种类型的默认ToString()实现.如果我以区域格式包装@ Model.PageTitle,即@Zone(Model.PageTitle),则不会再显示任何内容.我尝试过的其他属性是:@ Model.Title和@ Model.TitlePart.Title.
我也尝试过使用placement.info文件,但似乎希望PageTitle区域中的内容显示任何与我需要的内容不相符的内容.我通过以下内容证实了这一点:
<Place Parts_Title="Content:after" />
Run Code Online (Sandbox Code Playgroud)
该行(使用之前或之后)使标题显示,而不是在正确的位置.当我使用下面的内容时,没有任何显示(使用之前,之后,没有值,1等):
<Place Parts_Title="PageTitle:before" />
Run Code Online (Sandbox Code Playgroud)
因此,总结一下,如何让内容的标题显示在没有其他用户启动的内容显示的特定区域?
我正在编写一个自定义的 .Net 应用程序,该应用程序利用 Claims 来确保安全性,因为我们跨越了许多边界 - Web、API、批处理等等。在开发过程中,有时我会在通过 Chrome 登录时在系统中创建一些东西,然后我将通过 Edge 中的不同帐户测试新创建的项目,并以某种方式HttpContext.Current.User.Identity对应于我的 Chrome 会话。我确实Thread.CurrentPrincipal在幕后设置,但我的理解一直是所有进入 IIS 的请求都会产生一个新线程,所以我无法弄清楚为什么 Edge 请求被处理为好像它们是 Chrome 请求一样。
是否有可能因为 Visual Studio 处于调试模式而共享此信息?
如果这是一个基本问题,我提前道歉 - 我对 ElasticSearch 非常陌生,需要了解很多。
现在,我正在尝试实现一个基本的关键字搜索来搜索所有索引列,并且我得到了一些带有特定字段的奇怪结果,Year. 我有一定数量的文件,我知道应该从结果中返回,如果我搜索“2014”,它们都会成功返回。如果我只搜索“14”,什么都不会返回,如果我添加了一个通配符(例如*14),那么我会得到一个结果,因为它没有Year在搜索中使用而是从该Description领域。
我 100% 肯定这是我在查询结构上做错的事情,所以有什么提示吗?顺便说一句,如果有人可以提供建议的地方来了解有关使用 NEST 的 Elastic 的更多信息,那将非常有帮助。他们的文档有点缺乏,您必须了解如何使用 Elastic 才能使大部分内容有意义,而由于我不知道,所以我只能磕磕绊绊。
这是 的结构ElasticListing:
public long Id { get; set; }
public string Brand { get; set; }
public string Manufacturer { get; set; }
public string ActiveTags { get; set; }
public string Description { get; set; }
public int Year { get; set; }
public string Location { get; set; }
Run Code Online (Sandbox Code Playgroud)
我在 NEST 中使用的搜索结构是这样的, …
有没有办法在Internet Explorer中禁用打印而不在浏览器API周围编写shell?GPO将是最好的方法,但我当然可以做任何事情.
我实现了一个自定义消息检查器(通过IDispatchMessageInspector)来拦截在WCF服务的服务器端接收的消息,因此我可以尝试反序列化消息并应用一些特定的业务逻辑.我遇到的问题是当我将MessageBuffer的内容写入新的MemoryStream然后尝试反序列化时,我收到一条错误,指出"根级别的数据无效.第1行,第1位".我知道传入的数据是有效的,因为跳过检查器可以使一切正常.
示例代码:
public object AfterReceiveRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel, System.ServiceModel.InstanceContext instanceContext)
{
MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue);
request = buffer.CreateMessage();
string msg = buffer.CreateMessage().ToString();
var dc = new DataContractSerializer(typeof(Adder));
using (var stream = new MemoryStream())
{
buffer.WriteMessage(stream);
stream.Position = 0;
//deserializing error occurs here
var c = dc.ReadObject(stream);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这是Adder类/接口:
[DataContract(Name = "adder", Namespace = "http://test.com")]
public class Adder
{
[DataMember(Name = "first")]
public int First { get; set; }
[DataMember(Name = "second")]
public int Second { get; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PayPal Sandbox来测试自动信用卡处理,但遇到了问题.上周我的测试是"成功的",因为当发生验证错误时,API会窒息,但至少我知道发生了什么.清理我传递给API的代码后,我不再收到验证错误,只是内部服务错误,这已经发生了四天.
以下是日志文件显示的内容(此处删除了访问令牌,但它是在使用之前从API成功生成的):
2013-07-01 16:47:00,845 [32944] DEBUG PayPal.Manager.ConnectionManager [(null)] grant_type = client_credentials
2013-07-01 16:47:03,296 [32944] DEBUG PayPal.Manager.ConnectionManager [(null)]服务响应
2013-07-01 16:47:03296 [32944] DEBUG PayPal.Manager.ConnectionManager [(空)] { "范围":" https://api.paypal.com/v1/payments/*.https://开头api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/vault/credit-card/.* openid","access_token":"[生成的访问令牌]", "token_type":"Bearer","app_id":"[app ID]","expires_in":28800}
2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)] Content-Type:application/json
2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)]授权:持票人[访问代码]
2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)] User-Agent:PayPalSDK/rest-sdk-dotnet 0.7.1; lang = DOTNET; v = 4.0.30319.18046; bit = 64 ; os = Windows 8 6.2.9200.0;
2013-07-01 16:47:05,069 [32944] DEBUG PayPal.PayPalResource [(null)] PayPal-Request-Id:303be909-4268-4909-b1cb-b51b6dc7ea54
2013-07-01 16:47:05,365 [32944] DEBUG …
我已经编写了一个过程,在该过程中,将文件加密并上传到Azure,然后必须对下载过程进行解密,否则将失败,并显示“填充无效且无法删除”错误,或者“要解密的数据长度为无效。” 错误。
我已经尝试了许多在线解决方案,包括使用RijndaelManaged和CryptoStream解密C#mp3文件,但是它们似乎都不起作用,我最终只是在这两个错误之间来回跳动。加密过程使用的是解密使用的相同密钥/ IV对,并且由于它将解密一部分流,因此我感觉工作正常-最终会死于上述错误。
这是我的代码,有什么想法吗?请注意,三个变种(cryptoStream.CopyTo(decryptedStream),do {}和while)不跑起来-他们在这里展示我已经尝试过的选项,所有这一切的失败。
byte[] encryptedBytes = null;
using (var encryptedStream = new MemoryStream())
{
//download from Azure
cloudBlockBlob.DownloadToStream(encryptedStream);
//reset positioning for reading it back out
encryptedStream.Position = 0;
encryptedBytes = encryptedStream.ConvertToByteArray();
}
//used for the blob stream from Azure
using (var encryptedStream = new MemoryStream(encryptedBytes))
{
//stream where decrypted contents will be stored
using (var decryptedStream = new MemoryStream())
{
using (var aes = new RijndaelManaged { KeySize = …Run Code Online (Sandbox Code Playgroud) c# ×5
wcf ×3
aes ×1
asp.net ×1
asp.net-mvc ×1
cryptostream ×1
encryption ×1
httpcontext ×1
identity ×1
nest ×1
orchardcms ×1
paypal ×1
printing ×1
security ×1
wcf-security ×1