我正在使用 express 和 ejs 设置 Web 应用程序,并且需要集成 SAML 身份验证。我有一个 metadata.xml、一个公共证书和一个私钥。现在我想设置此策略并将其用于身份验证。我尝试使用一个名为passport-saml-metadata的模块,但是每当我尝试对其进行身份验证时,它都会说:错误:未知的身份验证策略“saml”,尽管它与其他有效的策略在同一文件中定义和导出。
首先我尝试使用passport-saml模块手动配置SAML,但后来我注意到它们是一个passport-saml-metadata,它可以处理我的元数据文件并建立策略,所以我决定使用这个。我现在有一个“有效”(它在执行中的任何时候都不会抱怨),但是当我调用路由时没有找到策略。同一文件中的其他策略被识别并且可以轻松工作。
护照配置:
// Read the metadata
const reader = new MetadataReader(
fs.readFileSync(path.join(__dirname, './metadata.xml'), 'utf8')
);
const ipConfig = toPassportConfig(reader);
const spPublicCertificate = path.join(__dirname, './server.crt');
const spPrivateKey = path.join(__dirname, './private_key.pem');
const spConfig = {
callbackUrl: `http://localhost:3300/auth/saml/sso/callback`,
logoutCallbackUrl: `http://localhost:3300/auth/saml/slo/callback`,
issuer: '/shibboleth',
privateCert: spPrivateKey
};
const strategyConfig = {
...ipConfig,
...spConfig,
validateInResponseTo: false,
disableRequestedAuthnContext: true,
};
const verifyProfile = (profile, done) => {
return done(null, { ...profile, test: 'xxx' });
};
const samlStrategy …Run Code Online (Sandbox Code Playgroud) 我有一个非常棘手的问题,目前无法找到答案:
我拥有的是一个带有 x 变体的枚举,例如:
public enum Symbol {
ROCK,
PAPER,
SCISSORS;
}
Run Code Online (Sandbox Code Playgroud)
这个枚举应该扩展一个、两个……变体(如石头、布、剪刀、史波克、蜥蜴),我正在寻找一个选项来存储组合的结果(在示例中,谁获胜)。就像在《石头、剪刀、布》中一样,我无法为枚举分配权重/值,然后可以将其用于比较。比较的结果不是基于逻辑的。我目前正在做的是:
public Result calculateResult(Symbol hand2) {
Symbol handP1 = this;
Symbol handP2 = hand2;
if (handP1 == Symbol.ROCK) {
switch (handP2) {
case SCISSORS:
return Result.WIN;
case ROCK:
return Result.TIE;
case PAPER:
return Result.LOOSE;
} ....
Run Code Online (Sandbox Code Playgroud)
我对比较的第一个元素的每个可能选项都执行此操作(在示例 hand1 中)。对于 3 个枚举,这非常简单和整洁,但是对于 4,5 个或更多,它很快就会变得混乱。使用 if 和 else if 进行比较也不太合适。有没有更好的方法来处理这个问题?
如果你想自己尝试一下,我已经设置了一个 repl:REPL 链接
使用 for 或更多选择打破了 3 个选择可能存在的循环关系。请参阅此处的示例:
感谢您提供任何可能帮助我获得更好解决方案的提示和提示