IdentityServer4存储客户端密钥

时间:2017-05-16 12:42:54

标签: .net entity-framework identityserver4

我目前正在尝试构建一个单点登录服务器,供几个客户端使用。因为我不确切知道会有多少客户端,所以我计划这样做,以便我可以使用EntityFramework配置存储在运行时添加客户端。

我现在的问题是如何设置客户端机密。我尝试生成一个新的GUID并将其用作秘密。现在的问题是,配置存储只是想保存密码的散列版本,我需要访问普通密钥才能将其添加到实际的客户端应用程序中。

我认为这是有目的的,并且不鼓励保存秘密的简单版本?什么是保存秘密的首选解决方案?

提前致谢!

2 个答案:

答案 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

https://github.com/IdentityServer/IdentityServer4/blob/dev/src/IdentityServer4/Validation/PlainTextSharedSecretValidator.cs