c# - .NET 标识 : Generate token without explicit username/password

标签 c# asp.net asp.net-identity

我有一个 MVC 应用程序配置为使用 ASP.NET Identity。更具体地说,我已将应用程序配置为使用 OAuth。一切都按原样完美运行。我可以将用户名/密码传递到我的 token 端点并接收 token 作为返回。我配置了刷新 token ,我剥离了默认声明并添加了我自己的声明,实现了授权属性等。

我有一个新的要求,需要根据非用户名/密码组合生成 token 。该组合类似于高级别的用户名/密码:用户传递关于他们自己的两部分,如果为真,则返回一个 JWT(就像用户名/密码一样)。

假设我有一个 Person 和 AspNetUser 表。一些 Person 记录将是 AspNetUsers,但不是全部。那些不想使用我上面描述的方法进行身份验证的人。我想,从技术上讲,它们可以是 AspNetUser 记录,但没有配置密码和可能的电子邮件。

我很难找到解决问题的正确方法。我是否创建自定义端点来获取此替代身份验证凭据并返回不记名 token ?如果是这样,关于利用 .NET Identity 返回 token 的正确方法有什么建议吗?我是否修改我的自定义 OAuthAuthorizationServerProvider 以说明此替代方法?如果是这样,关于创建“假”(即用户不存在于 AspNet* 表中)身份以返回给客户端的任何建议?

一如既往,我们将不胜感激。

谢谢!

最佳答案

@Zenichi 询问我是如何解决这个问题的,所以我添加了一个答案。事后看来,可能有更好的方法来解决这个问题,但这就是我的想法。

我添加了自定义 Controller ,它返回类似于身份框架的响应。我基本上只是构建一个票证,然后创建一个访问 token ,然后返回给调用者。这是一个片段:

var properties = new AuthenticationProperties(new Dictionary<string, string>
{
{
"audience", string.Empty
}
});

var ticket = new AuthenticationTicket(identity, properties)
{
Properties =
{
IssuedUtc = DateTime.UtcNow,
ExpiresUtc = DateTime.UtcNow.AddMinutes(Config.TokenLifeSpan)
};

var accessToken = new ApplicationJwtFormat(Config.Issuer).Protect(ticket);
var expiresIn = Config.TokenLifeSpan * 60 - 1;

var token = new OAuthSuccessResponse(accessToken, "bearer", Convert.ToInt32(expiresIn), null);
return Content(HttpStatusCode.OK, token);

    public OAuthSuccessResponse(string accessToken, string tokenType, int expiresIn, string refreshToken)
    {
        access_token = accessToken;
        token_type = tokenType;
        expires_in = expiresIn;
        refresh_token = refreshToken;
    }

再看一遍时,我可能会(至少)使用 pascal 将 OAuthSuccessResponse 的属性名称进行大小写处理,并使用 [JsonProperty] 属性在序列化期间控制大小写处理。

更进一步 - 我可能应该放弃这种方法并继续扩展我的 OAuthProvider 实现以处理传统的用户/密码和我需要的任何其他组合。

希望这对您有所帮助。

关于c# - .NET 标识 : Generate token without explicit username/password,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37079145/

相关文章:

asp.net-identity - Asp Mvc Core 2 Identity 在使用 AddAuthentication().AddCookie() 时未设置 cookie 名称

asp.net-mvc - 在 MVC5 中使用异步有什么优势?

c# - 使用 iTextSharp 签署 PDF

c# - 在 Xamarin PCL 项目中,如何在不单击新字段保留键盘的情况下进入上一个字段后将焦点移至下一个字段?

asp.net - HTTPModules 和 Global.asax -- ASP.NET 页面生命周期

c# - ASP.Net 标识 : Difference between UseOAuthBearerTokens and UseCookieAuthentication?

c# - 在本地主机上使用 asp.net core 2.1 身份时 TempData 丢失

c# - 在 asp mvc 中删除 Localhost url

c# - Visual Studio C# 2008 : Code Folding Problem when Typing

c# - 默认按钮设置