我被告知在这里提出一个关于Azure AD Graph Api的问题,而不是将其作为相应GitHub示例存储库的问题提出,我希望Azure Graph API团队监控SO并可以帮助我们解决这个github示例问题
该问题的一些额外背景:
我们正在使用Microsoft.Azure.ActiveDirectory.GraphClient nuget在Azure AD测试租户中创建和管理用户.在此示例应用程序之后, 我们可以通过Graph API在Azure AD中创建和更新用户.这很好,直到大约2-3天前发生的某个时刻(不确定确切的时刻,我们在周二早上的AU时间发现问题.上周成功运行是在上周五).它是100%正常工作的代码,并确认它不是我们的代码 - 我再次浏览了示例应用程序 - 它现在也已经破坏了.我已经使用最新的GraphClient v2.1.0和来自示例应用程序的原始版本-v2.0.6对其进行了测试
为了简化问题的测试,我已经制作了一个基于LINQ的示例并修改了一些秘密(如果你想运行它,你需要按照控制台应用程序示例指南输入你的值,而不是原始的示例应用程序)这里也是小提琴捕获(编辑)
fiddler捕获中很少有注意事项 - Azure AD Graph API不会返回刷新令牌以及访问令牌:
{"expires_in":"3599","token_type":"Bearer","scope":"UserProfile.Read",
"expires_on":"1441183928","not_before":"1441180028","resource":"https://graph.windows.net",
"access_token":"TOKEN WAS HERE"}
Run Code Online (Sandbox Code Playgroud)
我可以在这里看到范围字符串的问题,但是当我按照Sample app调用令牌时,我们没有在GraphClient中设置任何explict范围(这个代码之前很好,正如我之前提到的那样)
用户创建响应在发生的事情及其发生的原因方面很清楚
{"odata.error":
{"code":"Authorization_RequestDenied","message":
{"lang":"en","value":"Insufficient privileges to complete the operation."}
}
}
Run Code Online (Sandbox Code Playgroud)
但是目前尚不清楚如何通过任何这些AuthenticationContext.AcquireToken方法重载来请求额外的权限范围. 同样奇怪的是,相同的代码之前完全正常运行并且在经过一些神秘的变化后现在被破坏了吗?
所以我几乎没有问题:
如何在GraphClient库中添加额外的范围权限以获取启用了用户修改的Graph API令牌.这可能是问题的乐队援助解决方案.
看起来Azure AD尝试管理门户中客户端应用程序的权限.但是,Native Client类型的应用程序没有额外的权限.如何显式更新应用程序权限,以便现有代码可以再次运行.有可能吗?
任何人都可以推荐其他库与GraphAPI进行交互,这允许消费者明确指定所请求令牌的范围吗?
================更新================
是的,我看到了同意流程文档.追逐这个问题我创建了新的Azure AD租户,添加了全新的应用程序并添加了所有可能的权限,包括所有可用的应用程序和委托权限: 现在看起来像这样.我也
我可以获得一个带有长列表范围的令牌,例如
Directory.AccessAsUser.All Directory.Read Directory.Write User.Read User.ReadWrite User.Read.All User.ReadBasic.All User.ReadWrite.All user_impersonation UserProfile.Read …
c# azure oauth-2.0 azure-active-directory azure-ad-graph-api
我正在尝试在Visual Studio 2012中的C++项目中使用一些预构建步骤,但它们不会被调用(虽然我很确定Visual Studio 2010中的相同技术是正常的).命令行构建表现完全相同.
这是项目文件的结尾; 该文件是使用Visual Studio生成的,然后我刚刚添加了最后几行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="BeforeBuild">
<Message Text="### BeforeBuild ###" />
</Target>
<Target Name="BeforeCompile">
<Message Text="### BeforeCompile ###" />
</Target>
<Target Name="AfterBuild">
<Message Text="### AfterBuild ###" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这是输出:
Project "d:\temp\temp.vcxproj" on node 1 (default targets).
InitializeBuildStatus:
Creating "Debug\temp.unsuccessfulbuild" because "AlwaysCreate" was specified.
AfterBuild:
AfterBuild
FinalizeBuildStatus:
Deleting file "Debug\temp.unsuccessfulbuild".
Touching "Debug\temp.lastbuildstate".
Run Code Online (Sandbox Code Playgroud)
所以只考虑AfterBuild而忽略其他的.看看这个我在Microsoft.BuildSteps.targets中找到了这个PropertyGroup:
<BuildDependsOn>
_PrepareForBuild;
$(BuildSteps);
AfterBuild;
FinalizeBuildStatus;
</BuildDependsOn>
Run Code Online (Sandbox Code Playgroud)
难道这不也有BeforeBuild和BuildEvent目标吗?或者我的MSBuild安装有什么问题导致它使用此BuildSteps.targets文件而不是其他东西?
解
正如Alexey指出的那样,使用Before/AfterTarget提供了一个可用的解决方法.您只需要处理要使用的目标,但通过查看BuildSteps文件可以轻松实现.这似乎现在工作正常:
<Target Name="BeforeBuild" BeforeTargets="PrepareForBuild">
<Message Text="### BeforeBuild ###" />
</Target>
<Target Name="BeforeCompile" BeforeTargets="BuildCompile"> …Run Code Online (Sandbox Code Playgroud) 我们遇到了一个非常奇怪的问题(这种成熟产品真的很奇怪):如何使用Transact-SQL语句获取Unicode字符串中的字符数.这个问题的关键问题是len()TSQL函数返回字符数,不包括尾随空格.另一种变体是使用datalength(返回字节数)并除以2,因此获取Unicode字符的数量.但Unicode字符可以是代理对,所以它也不起作用.
我们有两种解决方案:第一种是使用len(replace()),第二种是添加单个符号,然后从结果中减去1.但IMO这两种变体都相当难看.
declare @txt nvarchar(10)
set @txt = 'stack '
select @txt as variable,
len(@txt) as lenBehaviour,
DATALENGTH(@txt)/2 as datalengthBehaviour,
len(replace(@txt,' ','O')) as ReplaceBehaviour,
len(@txt+'.')-1 as addAndMinusBehaviour
Run Code Online (Sandbox Code Playgroud)
任何其他想法如何计算字符串中的字符与尾随空格?
我试图使用powershell和ffmpeg工具自动化视频转换.如果在没有所有nessesary参数的情况下调用,Ffmpeg会有关于视频的详细输出.通常它会报告错误并显示输入文件信息(如果指定了一个).Ex我以交互方式执行了这样的命令:
d:\ video.Enc\ffmpeg.exe -id:\ video.Enc\1.wmv
这是powershell控制台输出
ffmpeg.exe : FFmpeg version SVN-r20428, Copyright (c) 2000-2009 Fabrice Bellard, et al.
row:1 char:24
+ d:\video.Enc\ffmpeg.exe <<<< -i d:\video.Enc\1.wmv
+ CategoryInfo : NotSpecified: (FFmpeg version ...Bel
lard, et al.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
built on Nov 1 2009 04:03:50 with gcc 4.2.4
configuration: --enable-memalign-hack --prefix=/mingw --cross-pre
fix=i686-mingw32- --cc=ccache-i686-mingw32-gcc --target-os=mingw32
--arch=i686 --cpu=i686 --enable-avisynth --enable-gpl --enable-vers
ion3 --enable-zlib --enable-bzlib --enable-libgsm --enable-libfaad
--enable-pthreads --enable-libvorbis --enable-libtheora --enable-li
bspeex --enable-libmp3lame --enable-libopenjpeg --enable-libxvid --
enable-libschroedinger --enable-libx264 --enable-libopencore_amrwb
--enable-libopencore_amrnb …Run Code Online (Sandbox Code Playgroud) 我正在尝试在自动构建服务器处理中部署数据库项目(dbproj格式,而不是新的SSDT sqlproj).我找到了以下内容:
当我在我的Msbuild脚本中使用Exec任务调用deploy时 - 一切正常:
<Exec Command="$(MSBuildPath)\MSBuild.exe $(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj
/t:Deploy
/p:OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\
/p:TargetDatabase=$(DeployDatabaseName)
/p:TargetConnectionString=$(DeployDatabaseConnectionString)" />
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用Msbuild任务重复此操作时 - 它的行为有所不同:
<MSBuild Projects="$(SourceFilesPath)\$(DeployDatabaseProjectName)\$(DeployDatabaseProjectName).dbproj"
Targets="Deploy"
Properties="Configuration=$(BuildConfiguration);
TargetDatabase=$(DeployDatabaseName);
TargetConnectionString="$(DeployDatabaseConnectionString)";
OutputPath=$(BaseOutput)\$(DeployDatabaseProjectName)\;
" />
Run Code Online (Sandbox Code Playgroud)
DeployDatabaseConnectionString中的分号破坏了Msbuild任务:
<DeployDatabaseConnectionString>Data Source=$(DeployDatabaseServer);Integrated Security=True;Pooling=False</DeployDatabaseConnectionString>
Run Code Online (Sandbox Code Playgroud)
它会报告这样的事情:
名称"Integrated Security"包含无效字符"".
但是如果我用百分比编码值 - %3B替换分号 - 它将在SqlDeployTask中破坏:
错误MSB4018:"SqlDeployTask"任务意外失败.
将TargetConnectionString传递给SqlProject的部署目标的正确方法是什么?
PS:我可以忍受exec任务很好,但是在msbuild脚本中调用msbuild.exe会伤害我内在的完美主义者.
我想编写powershell脚本来将所有工作副本从1.6 svn升级到1.7.问题是在指定的子目录中找到所有工作副本,并在每个匹配项的第一个匹配项上停止.这个脚本可以找到所有 .svn目录,包括嵌套在工作副本中的子目录:
Get-ChildItem -Recurse -Force -Path "d:\Projects\" |?{$_.PSIsContainer -and $_.FullName -match ".svn$"}|Select-Object FullName
Run Code Online (Sandbox Code Playgroud)
是否有任何选项可以在目录中的第一个匹配项上停止Get-ChildItem,并停止递归子目录处理?有什么提示可以看吗?
另一种选择是获取输出结果并使用某些逻辑对列表进行排序\过滤,基于父\子目录关系.有点混乱的方式,imo,但它也是一个选择......
msbuild ×2
powershell ×2
azure ×1
c# ×1
deployment ×1
oauth-2.0 ×1
scripting ×1
sql-server ×1
string ×1
svn ×1
t-sql ×1