在工作中,我们有一个Web应用程序,我们需要使用SAML验证的单点登录与其他公司的Web应用程序进行交互.我们的网络应用程序是用PHP编写的,显然与其他公司使用的语言选择无关.尽管如此,我还需要编写一个简单的API,这个其他公司可以使用SAML请求发送SOAP请求,并生成SAML响应.我从头开始编写它有三个原因:1)用PHP编写的SAML交互似乎没有很多选项,即使我想要一个,2)它限制了添加另一个第三个所涉及的开销-party组件,以及3)从头开始创建东西通常会让我有更好的理解,并且如果需要的话,使我能够更好地适应未来的事情.
无论如何,我对SAML,SOAP和XML标准一般都是新手,所以我一直在教我自己.我已经为我们的目的提供了相当完整的API,但有一个例外,即另一家公司已经指定我们的响应将需要使用证书进行数字签名(我们收到的请求将同样进行数字签名).所以我一直在试图弄清楚如何处理/生成XML签名,但老实说,由于W3C规范并不完全轻松,所以有点令人困惑.
OASIS安全标记语言(SAML)V1.1文件的断言和协议的第5.4.8节(我已经关闭的文件,正如另一家公司所说他们将使用v1.1)包括一个例子包含已签名断言的签名响应,我将在此处引用以供参考:
<Response IssueInstant="2003-04-17T00:46:02Z" MajorVersion="1" MinorVersion="1"
Recipient="www.opensaml.org" ResponseID="_c7055387-af61-4fce-8b98-e2927324b306"
xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_c7055387-af61-4fce-8b98-e2927324b306">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<InclusiveNamespaces PrefixList="#default saml samlp ds xsd xsi"
xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>TCDVSuG6grhyHbzhQFWFzGrxIPE=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>x/GyPbzmFEe85pGD3c1aXG4Vspb9V9jGCjwcRCKrtwPS6vdVNCcY5rHaFPYWkf+5EIYcPzx+pX1h43SmwviCqXRjRtMANWbHLhWAptaK1ywS7gFgsD01qjyen3CP+m3Dw6vKhaq1ed10BYyrIzb4KkHO4ahNyBVXbJwqv5pUaE4=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIICyjCCAjOgAwIBAgICAnUwDQYJKoZIhvcNAQEEBQAwgakxCzAJBgNVBAYTA1VT ... 8I3bsbmRAUg4UP9hH6ABVq4KQKMknxu1xQxLhpR1y1GPdiowMNTrEG8cCx3w/w==</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<Status><StatusCode Value="samlp:Success"/></Status>
<Assertion AssertionID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
IssueInstant="2003-04-17T00:46:02Z" Issuer="www.opensaml.org"
MajorVersion="1" MinorVersion="1" xmlns="urn:oasis:names:tc:SAML:1.0:assertion"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Conditions NotBefore="2003-04-17T00:46:02Z" NotOnOrAfter="2003-04-17T00:51:02Z">
<AudienceRestrictionCondition>
<Audience>http://www.opensaml.org</Audience>
</AudienceRestrictionCondition>
</Conditions>
<AuthenticationStatement AuthenticationInstant="2003-04-17T00:46:00Z" …Run Code Online (Sandbox Code Playgroud) 我有这样的界面:
public interface IMyInterface
{
event EventHandler<bool> Triggered;
void Trigger();
}
Run Code Online (Sandbox Code Playgroud)
我在我的单元测试中有一个模拟对象,如下所示:
private Mock<IMyInterface> _mockedObject = new Mock<IMyInterface>();
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
// pseudo-code
_mockedObject.Setup(i => i.Trigger()).Raise(i => i.Triggered += null, this, true);
Run Code Online (Sandbox Code Playgroud)
但是,在返回Raise的ISetup接口上看起来不可用.我该怎么做呢?
我最近在我的Windows 7 Ultimate x64家用机器上安装了SQL Server 2008 Express.我还有IIS 7.5和PHP 5.3,我试图通过ADODB连接到SQL ,但不断收到此错误:
[Microsoft][ODBC Driver Manager] The specified DSN contains an
architecture mismatch between the Driver and Application
Run Code Online (Sandbox Code Playgroud)
在互联网上进行少量挖掘之后,我认为这是因为SQL Server ODBC驱动程序适用于32位操作系统,而我的64位操作系统.首先,我是否正确?这是我遇到麻烦的原因吗?其次,如果是这样,我该如何解决这个问题呢?是否有任何更新的ODBC驱动程序可以与64位操作系统一起使用?我看了但是找不到任何......
识别同一时区的方法有多种,不同的程序可以以不同的方式使用这些方法。我住在威斯康星州,所以我们通常将这里的时区称为“中部时间”。但我知道 Windows 有一个 的注册表项Central Standard Time,它实际上由中部标准时间 (CST) 和中部夏令时间 (CDT) 组成。但最近我看到这个时区显示为America/Chicago。
引用这两个不同标准的正确术语是什么?比如说,你所说的America/Chicago识别时区的方式是什么?是不是类似于“标准 TZ 信息名称”或“ISO-1234567 时区名称”或“Eggert TZ 名称”?
那么稍微熟悉一点的呢Central Standard Time?您是否将该语法称为“友好时区名称”或“ISO-987654321 时区名称”或类似的名称?谢谢!
我可以用一个例子来解释我的问题.我最近下载了Python for Windows,安装到C:\ Python.所以,如果我在包含myscript.py的文件夹X中,并且我想调用它,我必须调用它:
> C:\Python\python.exe myscript.py
Run Code Online (Sandbox Code Playgroud)
但是,如果我可以在任何文件夹中执行此操作,那将是非常酷的:
> python myscript.py
Run Code Online (Sandbox Code Playgroud)
我该如何制作"全球"?
我已经按照许多在线教程在四个 Raspberry Pi 4 上设置了 Kubernetes 集群。我最终使用 Flannel 作为网络插件,因为它似乎是唯一一个真正适用于 RPi 的插件,根据2017 年的本指南,pod 网络 CIDR 为 10.244.0.0/16 。几乎一切正常……kube-system 命名空间中的所有基本 pod 都在运行/健康,我可以拉下图像并启动新容器。起初我无法获得任何 pod 日志,但是通过在每个节点上打开端口 10250 很快就解决了这个问题。
但是DNS解析好像还是有问题。我应该澄清一下,主机上的 DNS 解析显然有效,因为集群能够下载我指定的任何容器映像。但是一旦容器运行,它就无法“拨出”任何东西。作为测试,我arm32v7/buildpack-deps:latest在 pod 中运行容器。它可以很好地从 Docker 集线器中提取图像。但是当我进入它并简单地输入curl https://www.google.com它时,它会在最终超时之前挂起。我启动的任何需要与外部 Internet 交互的 Pod 也是如此:它们挂起、挂起、挂起。
以下是我已经在每个节点上运行的所有与网络相关的命令:
sudo iptables -P FORWARD ACCEPT
sudo iptables -A FORWARD -i cni0 -j ACCEPT
sudo iptables -A FORWARD -o cni0 -j ACCEPT
sudo ufw allow ssh
sudo ufw allow 443 # can't remember why i ran this one …Run Code Online (Sandbox Code Playgroud) 是否有任何共识是关于多线程应用程序的最佳实践:(1)使用单个,共享,静态连接到SQL数据库,或(2)每个BackgroundWorker打开它自己的唯一连接到数据库?
我显然假设每个线程都需要连接到同一个数据库.
使用类型是否会影响答案?例如,如果每个线程只运行SELECT语句怎么办?或者,如果某些线程也可以执行UPDATE语句?或者用法并没有真正有所作为,你应该总是/永远不分享静态连接?
感谢一些其他有用的StackOverflow问题,我找到了一种查询WMI设备驱动程序的方法.但是,在我看来,数据存储在不能很好地连接在一起的不同位置.
我有一个使用FTDI驱动程序的USB转串口电缆.我可以查询Win32_SystemDrivers以确定是否已安装驱动程序,如下所示:
SelectQuery query = new SelectQuery("Win32_SystemDriver");
query.Condition = "Name = 'FTDIBUS'";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection drivers = searcher.Get();
bool installed = (drivers.Count > 0);
Run Code Online (Sandbox Code Playgroud)
但是这个集合并没有告诉我关于版本信息的事情.所以我发现我可以查询Win32_PnPSignedDriver找到设备驱动程序的版本.所以我做的是这样的:
SelectQuery query = new SelectQuery("Win32_PnPSignedDriver");
query.Condition = "DriverProviderName = 'FTDI'";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection drivers = searcher.Get();
foreach (ManagementBaseObject driverObject in drivers)
{
ManagementObject driver = (ManagementObject)driverObject;
string version = driver["DriverVersion"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是,第二个代码块只有在实际插入电缆(设备)时才会成功.我想做的是检查已安装设备驱动程序的版本,无论设备当前是否已插入.
我该怎么做呢?
特别是,我想设置环境变量。我有一个CronJob按计划运行的定义,但我经常想在指定略有不同的环境变量时手动调用它。
我可以使用以下命令手动调用 cron 作业:
kubectl create job --from=cronjob/my-cron-job my-manual-run
Run Code Online (Sandbox Code Playgroud)
但这会复制资源定义中指定的所有相同环境变量。如何使用此create job命令添加其他新的环境变量?
我对Python一般都很陌生,但我在Python 2.6/wxPython 2.8中创建了一个应用程序,当我通过Python运行时它非常有效.但我想更进一步,并能够将其部署为Windows可执行文件,所以我一直在尝试py2exe.但是我无法让它发挥作用.它总是会编译一个exe,但是当我真的尝试运行它时会发出一些神秘的错误消息.起初他们是简单的消息,说它找不到某些DLL,但即使给它所需的所有DLL,它现在返回:
The application failed to initialize properly (0xc0000142).
Click OK to terminate the application.
Run Code Online (Sandbox Code Playgroud)
所以我打破了局面,只是用wxPython制作了一个非常非常简单的应用程序,看看它是否有用,或者我的原始应用程序的一些更复杂的功能是否会妨碍.但即便是我的简单测试也返回了相同的错误.这是简单测试脚本的代码:
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX)
panel = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)
main_sizer = wx.BoxSizer(wx.VERTICAL)
testtxt = wx.StaticText(panel, -1, label='This is a test!')
main_sizer.Add(testtxt, 0, wx.ALIGN_CENTER)
panel.SetSizerAndFit(main_sizer)
self.Show(1)
return
app = wx.PySimpleApp()
frame = MainWindow(None, -1, 'Test App')
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
这是我使用的py2exe安装脚本:
#!/usr/bin/python
from distutils.core import setup
import py2exe
manifest …Run Code Online (Sandbox Code Playgroud)