Azure App Service TableController授权用户

时间:2017-09-15 05:17:30

标签: c# azure azure-mobile-services

我使用Microsoft帐户在Azure应用服务(Azure移动服务)上进行身份验证设置。

但是,它目前允许任何拥有Microsoft帐户的用户使用该服务。我试图针对授权用户对另一个列表(msaUsers)执行检查,但我发现这并不总是有效。我目前正在衡量"成功"在msaUsers中插入另一个条目。在CheckIfAuthorized()GetItem()PostItem()等中调用了PatchItem()。但我发现它并不总是因某种原因插入新项目。我也看到了双重进入的案例。

为什么这不起作用?如果有更好的方法,我也想知道。

    MobileAppContext context;
    EntityDomainManager<MSAAccountItem> msaUsers;
    JToken userInfo;

    public async Task CheckIfAuthorized()
    {
        if (userInfo == null)
        {
            //Get the current logged in user
            MicrosoftAccountCredentials msCreds = await User.GetAppServiceIdentityAsync<MicrosoftAccountCredentials>(Request);
            var c = new HttpClient();
            var resp = await c.GetAsync("https://apis.live.net/v5.0/me/?method=GET&access_token=" + msCreds.AccessToken);
            resp.EnsureSuccessStatusCode();
            userInfo = JToken.Parse(await resp.Content.ReadAsStringAsync());
            string id = string.Empty;
            string name = string.Empty;
            if (userInfo["id"] != null) { id = userInfo["id"].ToString().Trim(); }
            if (userInfo["name"] != null) { name = userInfo["name"].ToString().Trim(); }

            msaUsers = new EntityDomainManager<MSAAccountItem>(context, Request);
            var efe = from wefe in msaUsers.Query() where wefe.mSAAccountItemUserId == id select wefe;
            if (!efe.Any())
            {
                //not authorized, maybe throw an exception.
            }
            //if (!efe.Any())
            //{
            //    await msaUsers.InsertAsync(new MSAAccountItem()
            //    {
            //        mSAAccountItemUserId = id,
            //        mSAAcountUserName = name,
            //        PersonItemId = string.Empty
            //    });
            //}
        }
    }

已修改以显示检查用户是否在msaUsers(已授权)

0 个答案:

没有答案