AspNet Identity 2:自定义OAuth端点响应

dgn*_*dgn 27 oauth-2.0 asp.net-identity asp.net-web-api2

我成功实现了我的自定义OAuthAuthorizationServerProvider.但是当我登录并检索令牌时,我的客户端不知道用户的角色,声明等.

我目前添加了一个webapi控制器来返回委托人的声明列表,但我对此并不满意.

请求令牌时,当前响应如下所示:

{
    access_token: "qefelgrebjhzefilrgo4583535",
    token_type: "bearer",
    expires_in: 59
}
Run Code Online (Sandbox Code Playgroud)

问:如何让它返回类似下面的片段?

{
    access_token: "qefelgrebjhzefilrgo4583535",
    token_type: "bearer",
    expires_in: 59,
    user: {
        name: 'foo',
        role: 'bar'
    }
}
Run Code Online (Sandbox Code Playgroud)

我到目前为止的进展:

文件OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext)说:

在成功的令牌端点请求的最后阶段调用.应用程序可以实现此调用,以便对用于发出访问或刷新令牌的权利要求进行任何最终修改.也可以使用此调用以向Token端点的json响应主体添加其他响应参数.

我找不到任何如何自定义响应的示例,并且asp-net Identity的源代码尚未发布,所以我很困惑.

jd4*_*d4u 34

可能是你正在寻找TokenEndpoint方法覆盖OAuthAuthorizationServerProvider.

public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
    foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
    {
        context.AdditionalResponseParameters.Add(property.Key, property.Value);
    }

    return Task.FromResult<object>(null);
}
Run Code Online (Sandbox Code Playgroud)

  • 你的代码运行良好,但是当我尝试返回对象而不是顶级值时,我得到一个错误500. IIRC规范(对于OAuth2或其他东西)说令牌和东西必须是顶级值,所以我想这是为什么.我仍然希望自定义价值更自由.无论如何,这是我的问题的答案,谢谢! (2认同)
  • @scenario //检查ApplicationOauthProvider.cs文件中的`CreateProperties`方法及其相关用法. (2认同)