我目前正在尝试构建一个单点登录服务器,供几个客户端使用。因为我不确切知道会有多少客户端,所以我计划这样做,以便我可以使用EntityFramework配置存储在运行时添加客户端。
我现在的问题是如何设置客户端机密。我尝试生成一个新的GUID并将其用作秘密。现在的问题是,配置存储只是想保存密码的散列版本,我需要访问普通密钥才能将其添加到实际的客户端应用程序中。
我认为这是有目的的,并且不鼓励保存秘密的简单版本?什么是保存秘密的首选解决方案?
提前致谢!
答案 0 :(得分:6)
使用以下算法生成sha256哈希。这与<?php
session_start();
$error = false;
// if the form has been posted
if ($_POST) {
//Authenticate user
// do db query and get users password
if ($_POST['password'] == $password) {
// success
// redirect user to next page
} else {
$error = true;
}
}
?>
<body>
<div class="paper">
<h3>Login</h3>
<?php if ($error): ?>
<div class="wrongpassword">
<p>Your password is incorrect</p>
</div>
<?php endif; ?>
<form action="login.php" method="post" enctype="multi-part/form-data">
Username:<br>
<input placeholder="Username" name="username" type="text" autofocus><br> Password:
<br>
<input placeholder="Password" name="password" type="password"><br>
<br>
<input name="login" type="submit" value="login">
</form>
<hr>
<p>Need a account? <a href="register.php">Sign up here!</a></p>
</div>
</body>
类中使用的算法相同。
IdentityServer4.Models.HashExtensions
答案 1 :(得分:0)
您不应以纯文本格式存储客户端密钥。
始终假设您的配置数据库遭到入侵 - 然后这些机密可用于冒充您的客户。
这对您来说可能有点不方便 - 但这是一种最佳做法(并且与其他令牌服务如何处理相符)。
如果您还有其他保护秘密的方法 - 您可以将基于纯文本的秘密验证器添加到DI