我使用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
(已授权)