OWIN + OAuth - 如何提供用户ID而不是UserName

时间:2014-11-26 12:48:38

标签: c# asp.net .net oauth owin

我正在创建自己的授权提供程序,该提供程序从OAuthAuthorizationServerProvider扩展。

public class AsyncAuthorizationProvider : OAuthAuthorizationProvider {
     //...
     public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) {
         string username = context.UserName; //Returns the username sent in the request.
         string password = context.Password; //Returns the password sent in the request.
         //...
     }
}

正如您所看到的,OAuthGrantResourceOwnerCredentialsContext的上下文已经附带了两个用于检索用户名和密码的有用属性。

用户在向我的oauth端点发送信息时会发送此信息:

{
    "grant_type": "password",
    "client_id": "someClientId",
    "client_secret": "someClientSecret",
    "username": "myUsername",
    "password": "myPassword"
}

此JSON存储在OAuth上下文中,但如果我想发送userId而不是username,该怎么办?如果我的应用程序允许重复的用户名并且我想使用id来唯一标识一个用户名怎么办?

当然,我可以发送我的身份证"username": "myUserId"。但这似乎不对。

username应包含username。这可能会使消费者感到困惑。

有没有办法发送userId 以从上下文中检索它?

1 个答案:

答案 0 :(得分:4)

您可以设置您想要的任何参数,并按以下方式获取:

var formCollection = (Microsoft.Owin.FormCollection)context.Parameters;

var userId = formCollection.Get("userId");