从RestClient请求Web Api

时间:2016-08-25 10:05:41

标签: c# asp.net-web-api azure-mobile-services

我在xamarin表单中使用web api。使用microsoft帐户登录后,我发送带请求的访问令牌,每个端点都正常工作。但现在我们已经在控制器上实现了角色。我使用过自定义身份验证。我想从请求中获取userID,而不是来自客户端请求。我担心的是,我是否应该使用令牌或任何其他方式获取用户详细信息?请指导我。 我要遵循以下步骤使用该服务: - 1.使用Microsoft帐户登录。 2.获取访问令牌并传入请求标头。

这里是web api Custom AuthorizationFilter代码: -

public override void OnAuthorization(HttpActionContext actionContext)
        {
            WMSEntities db = new WMSEntities();
            //IEnumerable<string> auth_token;
            //actionContext.Request.Headers.TryGetValues("x-zumo-auth", out auth_token);
            //var result = Get<List<AzureUserDetail>>(HttpWebRequest.Create(url + "/.auth/me"), auth_token.FirstOrDefault(), null)?.FirstOrDefault();


            //actionContext.Request.Headers.TryGetValues("email", out auth_token);
            string userID = actionContext.ControllerContext.RequestContext.Principal.Identity.Name;
            var user = db.UserProfiles.FirstOrDefault(x => x.Name == userID);

            if (user == null)
                actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            else
            {
                bool ok = false;
                foreach (var item in user.AppRoles)
                {
                    foreach (string ar in accessRoleNames)
                    {
                        if (item.Name == ar)
                            ok = true;
                    }
                }
                db.Dispose();

                if (!ok)
                    actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            }
            base.OnAuthorization(actionContext);
        }

我应该取消评论三行代码或任何其他方式来获取用户ID。

1 个答案:

答案 0 :(得分:1)

由于您使用基于令牌的身份验证,我会根据令牌获取用户信息。

您可能遇到用户在服务器上没有Identity但已提交有效身份验证令牌的情况。