如何将更多参数传递给令牌端点web api 2

时间:2014-03-26 16:48:03

标签: asp.net-web-api asp.net-identity

我需要将更多参数传递给令牌端点

grant_type =密码&安培;用户名=爱丽丝&安培;密码= password123&安培; peop1 =值安培; PROP2 =值

获取令牌

我如何通过这些以及我可以在服务器上获取它们

3 个答案:

答案 0 :(得分:1)

OAuth2资源所有者密码流定义了这些参数。如果您在验证用户时需要执行其他操作,则应查看隐式流 - 这样您就可以编写自定义登录屏幕以接受用户需要的任何数据。

答案 1 :(得分:1)

OWIN的解决方案,但你可以理解。

传递参数:

grant_type=password&username=Alice&password=password123&peop1=value&Prop2=value

让他们进入您的授权服务器提供商:

public class YourAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    ...
    public override Task ValidateTokenRequest(OAuthValidateTokenRequestContext context)
    {
        context.Request.Body.Position = 0;
        var reader = new StreamReader(context.Request.Body);
        var body = reader.ReadToEnd();                         <-- you got them all!
        return base.ValidateTokenRequest(context);
    }
}

不要忘记在配置中传递授权服务器提供程序:

...
var options = new OAuthAuthorizationServerOptions
{
    Provider = new YourAuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(options);
...

答案 2 :(得分:0)

在OWIN OAuthAuthorizationServerProvider上,您可以像这样捕获参数:

public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
    string peop1 = context.Parameters["peop1"];

    //You can pass if you need the parameter to your GrantResourceOwnerCredentials
    context.OwinContext.Set<string>("as:peop1", peop1);
}


public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    var peop1 = context.OwinContext.Get<string>("as:peop1");