我有一个Android应用程序,在其中我使用Azure广告B2C认证用户。用户根据需要登录和注销应用程序。我想给用户选择删除他们自己的帐户。
我知道我需要使用Azure AD Graph API来删除用户。这是我目前所掌握的:
根据这个链接,它看起来像是从个人帐户删除一个用户(这是B2C用户正在使用的)是不可能的。那是正确的吗?
下面是图形API调用的代码片段。如果我偏离了轨道,请随意忽略它,并且有更好的方法来解决这个问题。
我相信我需要一个单独的访问令牌,而不是我的应用程序目前所拥有的(因为图形API需要其他API的同意)。因此,我将按照以下方式获取访问令牌:
AcquireTokenParameters parameters = new AcquireTokenParameters.Builder()
.startAuthorizationFromActivity(getActivity())
.fromAuthority(B2CConfiguration.getAuthorityFromPolicyName(B2CConfiguration.Policies.get("SignUpSignIn")))
.withScopes(B2CConfiguration.getGraphAPIScopes())
.withPrompt(Prompt.CONSENT)
.withCallback(getGraphAPIAuthCallback())
.build();
taxApp.acquireToken(parameters);
在getGraphapiauthCallback()
html" target="_blank">方法中,我使用单独的线程(在后台)调用Graph API:
boolean resp = new DeleteUser().execute(authenticationResult.getAccessToken()).get();
最后,在我的DeleterUser()AsyncTask
中,我正在执行以下操作:
@Override
protected Boolean doInBackground(String... aToken) {
final String asToken = aToken[0];
//this method will be running on background thread so don't update UI from here
//do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here
IAuthenticationProvider mAuthenticationProvider = new IAuthenticationProvider() {
@Override
public void authenticateRequest(final IHttpRequest request) {
request.addHeader("Authorization",
"Bearer " + asToken);
}
};
final IClientConfig mClientConfig = DefaultClientConfig
.createWithAuthenticationProvider(mAuthenticationProvider);
final IGraphServiceClient graphClient = new GraphServiceClient.Builder()
.fromConfig(mClientConfig)
.buildClient();
try {
graphClient.getMe().buildRequest().delete();
} catch (Exception e) {
Log.d(AccountSettingFragment.class.toString(), "Error deleting user. Error Details: " + e.getStackTrace());
}
return true;
}
当前,我的应用程序在尝试获取带有空指针异常的访问令牌时失败:
com.microsoft.identity.client.exception.MsalClientException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference
任何想法,我需要做什么,以提供用户的选择,用户删除他们自己的帐户?谢谢!
“谢谢你的帮助,”艾伦-吴。由于他的帮助,这个azure反馈请求和这个azure doc,我得以弄清楚如何静默地获取和删除用户(不需要干预)。
正如@Allen-Wu所说的,您不能让用户删除自己。因此,我决定让移动应用程序在用户单击“删除帐户”按钮时调用服务器端的NodeJS API(因为我不想在android应用程序中存储客户端机密),并让NodeJS API调用Azure广告端点以静默删除用户。需要注意的是,第一次尝试进行身份验证时需要管理员的同意。另外,我只针对Graph API对此进行了测试。我不能百分之百肯定它是否也适用于其他API。
以下是步骤:
>
在AAD B2C租户中创建应用程序。创建客户端机密并赋予它以下API权限:directory.readwrite.all
;AuditLog.read.all
(我不能百分之百确定是否需要AuditLog权限。我还没有在没有它的情况下进行过测试)。
在浏览器中粘贴以下链接:
GET https://login.microsoftonline.com/{tenant}/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions
POST https://login.microsoftonline.com/{B2c_tenant_name}.onmicrosoft.com/oauth2/v2.0/token
在正文中,包括client_id
、client_secret
、grant_type
(其值应为client_credential
)和scope
(值应为'https://graph.microsoft.com/.default')
DELETE https://graph.microsoft.com/v1.0/users/{upn}
不要忘记在头中包含访问令牌。我注意到在Postman中,graph api有一个bug,如果我在授权头的开头包含单词'barer'就会返回一个错误。尝试不使用它,它会起作用的。我还没有在我的NodeJS API中尝试过它,所以,到目前为止,还不能对它发表评论。
@Allen-Wu还建议使用ROPC流,我还没有尝试过,所以,不能比较这两种方法。
希望这有帮助!
问题内容: 在Java中,我想删除包含文件和文件夹的文件夹中存在的所有内容。 此代码不起作用,执行此操作的最佳方法是什么? 问题答案: 如果您使用Apache Commons IO,那么它是单线的: 请参阅FileUtils.deleteDirectory() 番石榴曾经支持类似的功能: 几个版本之前已将其从Guava中删除。 虽然以上版本非常简单,但也很危险,因为它在不告诉您的情况下做出了许多假
我修改了一小段代码,但无法运行。我总是发现一个例外: 保存失败:保存包时出错:重复条目:docProps/core.xml 错误抛出在这行: 我认为出现了这个例外,因为我不允许在同一个工作簿上读写,但是如果没有现有的Excel文件,我如何初始化新工作簿? 代码:(来自这里(感谢发起者):如何使用ApachePOI删除行) 和 [编辑2016-06-21]: 我加了 给我的POM,现在它产生了 线程
null 当我执行时,它会告诉我并且我执行并且它返回1.6。 注意:稍加摆弄,就可以使用IntelliJ和JDK7,见这里。
问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中
问题内容: 我有一个xml,如下所示: 现在,我想删除标记,但在此处保留内容“ ABCD”。或者有没有一种方法可以使用java从整个XML文件中删除。请帮忙。谢谢。 问题答案: 使用DOM4J或SAX解析器解析文档 从标签中获取价值 从值中删除所有html标签 JSoup三通 字符串替换 将新值设置为XML字体标签
我正在使用gradle构建一个Spring Boot应用程序,我希望从war中删除文件,因为该文件将从外部加载(它运行在tomcat容器中,而不是嵌入式的)。 我查看了StackOverflow和Gradle文档,试图找出该做什么,但我不知道该绑定到哪个阶段,以及在创建war之前还是之后排除该文件。处理文件似乎也有多种方法。 我相信Maven使用作为等价物。