我正在创建自己的授权提供程序,该提供程序从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
和以从上下文中检索它?
答案 0 :(得分:4)
您可以设置您想要的任何参数,并按以下方式获取:
var formCollection = (Microsoft.Owin.FormCollection)context.Parameters;
var userId = formCollection.Get("userId");