【问题标题】:Sending Additional Parameters to Token in Web API with oauth2 and AngularJS使用 oauth2 和 AngularJS 在 Web API 中向令牌发送附加参数
【发布时间】:2016-04-03 17:49:39
【问题描述】:

我有一个用 AngularJS 编写的应用程序,它通过 oauth 2 联系 Web API 以进行身份​​验证。该核心部分一切正常,但我需要传入额外的参数来评估登录 (clientID) 并设置记住我的类型功能(记住)。

从 Angular 来看,它看起来像这样:

    var data = "grant_type=password&username=" + form.username + "&password=" + form.password + "&clientID=" + clientID + "&remember=" + form.remember;

    var deferred = $q.defer();

    $http.post(serviceBase + 'token', data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).success(function (response) {

在我通过 Startup.cs 和 SimpleAuthorizationServerProvider.cs 处理令牌后,有什么想法是捕获这些值的最佳方式吗?谢谢

【问题讨论】:

    标签: c# angularjs asp.net-web-api oauth-2.0


    【解决方案1】:

    使用GrantResourceOwnerCredentials时,您可以从OAuthGrantResourceOwnerCredentialsContext检索OWIN请求,并通过调用ReadFormAsync()提取您需要的自定义参数。

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var form = await context.Request.ReadFormAsync();
    
        if (string.Equals(form["remember"], "true", StringComparison.OrdinalIgnoreCase))
        {
            // Add custom logic to handle the "remember me" case.
        }
    }
    

    也就是说,通常不鼓励添加自定义(即非标准)参数,特别是如果它们是强制性的。请注意,您不需要使用自定义 clientID 参数,因为已经有一个标准等效参数:client_id。

    【讨论】:

    • 这就像一个魅力。感谢您的协助。我忽略了client_id,所以很高兴知道。因此,如果不鼓励添加非标准参数,您建议如何传递该真/假值以设置记住我的功能?
    • 恕我直言,“记住我”的事情在奇妙的代币世界中没有多大意义。它到底是做什么的?
    • 我真的不是记住我功能的忠实粉丝,但我的客户想要它。基本上,令牌默认设置为 24 小时后过期,记住我将过期值延长到 30 天。
    • 使用长期或持久的访问令牌确实不是一个好主意。相反,您是否考虑过使用刷新令牌?
    • 我对刷新令牌的探索不多。我会让他们看看,看看我能不能和他们一起完成同样的事情。
    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多