我需要为node.js服务提供基于SAML2.0的单点登录(SSO)功能.这将消耗由运行Active Directory联合服务(ADFS)的身份提供程序(IdP)生成的SAML断言
理想情况下,我想设置一个测试ADFS IdP,我可以用它来内部生成SAML断言.然后我可以使用它来确保我的服务正确处理这些断言.
不幸的是我的公司不使用Active Directory,因此我们不能只设置测试ADFS平台.许可证很昂贵,因此我无法从头开始创建内部测试服务器.
我是否可以通过低成本方式模拟ADFS IdP,为我的新SSO服务提供真实的测试平台?
我希望我的静态内容(图像,javascript文件,css文件等)只有在文件更新后才能完整提供.
如果自上次请求的文件并没有改变(如由确定ETag和Last-Modified响应报头值),那么我想通过客户端浏览器中使用的文件的缓存版本.
南希是否支持此功能?
SSVE是否支持嵌套迭代器?
我希望在我的SSVE视图中向下走一个对象图(见下文),但我怀疑嵌套迭代器不是这里的方法.还有另一种方法吗?
我知道SSVE是供内部使用的,并不适合完全生产使用,所以没有问题,但我不想添加对Razor的引用并弄乱我的web.config文件,除非我绝对必须这样做.
嵌套迭代器视图(我的最佳猜测)
@Master['_Master']
@Section['Content']
<h1>Assessment - @Model.survey.title</h1>
@Each.survey.pages
<div>
<h2>@Current.title</h2>
@Each.questions
<div>@Current.title</div>
@EndEach
</div>
@EndEach
@EndSection
Run Code Online (Sandbox Code Playgroud) 我需要从Request.Headers集合中获取一些自定义(shibboleth)标头值.目前我正在使用以下代码执行此操作:
CommonName = Request.Headers["cn"].FirstOrDefault();
Email = Request.Headers["mail"].FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
是否有一个不那么繁琐的语法来获取标题值?我希望看到一个动态的物体,如Query或Form所以我可以使用动态属性名称,像这样:
CommonName = Request.Headers.cn;
Email = Request.Headers.mail;
Run Code Online (Sandbox Code Playgroud)
谢谢.
说我有以下内容 User
public class User
{
// ... lots of other stuff
public string Id{ get; set; }
public double Relevance { get; set; }
public bool IsMentor { get; set; }
public string JobRole { get; set; }
public bool IsUnavailable { get; set; }
public List<string> ExpertiseAreas { get; set; }
public List<string> OrganisationalAreas { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我想执行搜索,找到完全符合以下条件的所有用户:
IsMentor等于真IsUnavailable等于假Id 不等于单个被排除的用户(进行搜索的人)我还希望结果完全或部分匹配以下条件,但仅在提供搜索项时,否则我希望忽略约束.
JobRole= [ 值 ]ExpertiseAreas包含来自[ value-1, …因为我学会了角度,所以有两个问题困扰我:
如何在用户刷新页面或点击后退按钮时恢复状态?
如何在属于不同控制器的作用域之间共享数据?
下面我展示了一个使用客户端会话存储的简单解决方案.它允许在用户刷新页面或点击后退按钮后共享公共数据和自动恢复状态.
注意:以下解决方案证明对回答以下问题至关重要:
作为服务提供者(SP),我编写了一个node.js服务来处理SAML2.0断言。我现在要测试此代码。
我知道我可以使用各种基于云的服务充当我的测试身份提供程序(IdP),但是这些要求将我未经测试的新SP端点公开。
当前,我只是在SP端点上发布了手工制作的SAML2.0声明,但是我想进行更实际的测试,尤其是能够测试SP发起的SSO。
因此,我认为我需要在我的开发计算机上运行本地IdP,这样我现在就可以将所有测试保持在本地并沙盒化。
您能为我推荐一条前进的道路吗?
Nancy通过dynamic变量将我的查询字符串和表单值传递给我的处理程序.下面的示例显示了通过Nancy请求传递给POST处理程序的表单值,例如Request.Form.xxx.
处理器
Post["/"] = _ =>
{
var userId = (string) Request.Form.userid;
if (userId.IsEmpty()) return HttpStatusCode.UnprocessableEntity;
return HttpStatusCode.OK;
};
Run Code Online (Sandbox Code Playgroud)
您可以看到我正在转换userid为字符串,然后使用字符串扩展方法来检查值是null还是空字符串(相当于string.IsNullOrEmpty()).
我更喜欢的是在动态类型上使用扩展方法,以便在执行任何其他操作之前执行我的健全性检查.我想要这样的代码:
if(Request.Form.userid.IsEmpty()) return HttpStatusCode.UnprocessableEntity;
Run Code Online (Sandbox Code Playgroud)
但是,您不能拥有dynamic类型的扩展方法.此外,您无法通过反射检查是否存在属性.欢迎来到DLR.
题
执行预检查以确保将预期的查询/表单值传递给我的Nancy处理程序的最简单,最安全的方法是什么?
谢谢
我想使用Jasmine来确保AngularJS正确信任html数据值.
码
下面的代码article通过外部api 获取并使用Angular $sce来信任保存的html内容article.Body.
getArticle: ->
defer = @$q.defer()
@getContent(url).then (result) =>
article = result.data
article.Body = @$sce.trustAsHtml article.Body
defer.resolve article
defer.promise
Run Code Online (Sandbox Code Playgroud)
这段代码有效,当我逐步完成它时,我可以看到返回的数据并且html属性article.Body已被正确信任.现在我想编写一个单元测试来证实这一点.
单元测试
这是我对茉莉花单元测试的尝试:
describe 'when getArticle is called with valid articleId', ->
it "should call getContent and return article with trusted html", ->
getContentDefer = @$q.defer()
spyOn(@contentService, 'getContent').andReturn getContentDefer.promise
article = {Id:'1', Body: '<div>test</div>'}
@contentService.getArticle(article.Id).then (response) =>
expect(response.Body instanceof TrustedValueHolderType).toBeTruthy()
getContentDefer.resolve {data:article}
@$rootScope.$digest()
Run Code Online (Sandbox Code Playgroud)
您可以看到我正在尝试确保返回的response.Body是AngularJS类型的实例:TrustedValueHolderType.我不知道这是不是一个好主意,但无论如何,它不起作用,我收到以下错误:
ReferenceError: TrustedValueHolderType …Run Code Online (Sandbox Code Playgroud) 我在express/nodejs上有一个内置coffeescript的SAML2.0单点登录系统.
我使用SSOCircle来测试我的SSO,并且可以使用HTTP-POST或HTTP-REDIRECT绑定成功进行身份验证.到现在为止还挺好.
现在我需要对我的身份验证请求进行数字签名.
为此,我使用了nodejs xml-crytpo库.这导致SAML看起来像这样:
<?xml version="1.0"?>
<samlp:AuthnRequest Version="2.0" ID="_1C8A2EFA-2644-4330-9A36-2B45547ECFAF" IssueInstant="2014-10-14T16:06:27.769Z" Destination="https://idp.ssocircle.com:443/sso/SSOPOST/metaAlias/ssocircle" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
<saml:Issuer>http://app.localhost</saml:Issuer>
<samlp:NameIDPolicy AllowCreate="true" />
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#_1C8A2EFA-2644-4330-9A36-2B45547ECFAF">
<Transforms>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>m4qHiXM82TuxY31l6+QSECHEHc0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>fps0I0Rp02qDK0BPTK7Lh+ ...</SignatureValue>
<KeyInfo>
<X509Data>MIICuDCCAaCgAwIBAgIQEVFtJk ...</X509Data>
</KeyInfo>
</Signature>
</samlp:AuthnRequest>
Run Code Online (Sandbox Code Playgroud)
为简洁起见,已删除数字签名中包含的证书信息,但它来自pem我在本地生成的文件(自签名).
我也更新提供给SSOCircle为包括SAML属性我的服务提供商的元数据AuthnRequestsSigned和WantAssertionsSigned,就像这样:
<md:EntityDescriptor entityID="http://app.localhost" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
<md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
...
</md:SPSSODescriptor>
</md:EntityDescriptor>
Run Code Online (Sandbox Code Playgroud)
AuthnRequest没有数字签名发送我的工作正常.当我包含数字签名时,它失败的状态代码500和通用的"无效请求"消息.
我如何正确地对我进行数字签名,AuthnRequest以便它可以对抗SSOCircle?
谢谢.