AuthenticationContext.AcquireTokenAsync是C#的新手
我是Azure新手,希望能够以编程方式从Azure获取令牌。 无论我做什么,它似乎都失败了 – 有没有人有一个有效的例子? 多谢你们
我调用GetAToken().Wait();
。
方法是:
public async Task GetAToken() { // authentication parameters string clientID = "*********"; string username = ""; string password = ""; string directoryName = ""; ClientCredential cc = new ClientCredential(clientID, password); var authenticationContext = new AuthenticationContext("https://login.windows.net/" + directoryName); AuthenticationResult result = await authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", cc); if (result == null) { throw new InvalidOperationException("Failed to obtain the JWT token"); } string token = result.AccessToken; return token; }
所以不确定你是否在Android,iOS或Xamarin.Forms上这样做。 下面是我将如何使用ADAL和Azure进行身份validation(代码正在我的工作中):
在Android上:
public async Task Authenticate(Activity context, string authority, string resource, string clientId, string returnUri) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var uri = new Uri(returnUri); var platformParams = new PlatformParameters(context); try { var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); return authResult; } catch (AdalException e) { return null; } }
在iOS上:
public async Task Authenticate(UIViewController controller, string authority, string resource, string clientId, string returnUri) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var controller = UIApplication.SharedApplication.KeyWindow.RootViewController; var uri = new Uri(returnUri); var platformParams = new PlatformParameters(controller); try { var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); return authResult; } catch (AdalException e) { return null; } }
在UWP上 :
public async Task Authenticate(string authority, string resource, string clientId, string returnUri) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); var uri = new Uri(returnUri); var platformParams = new PlatformParameters(PromptBehavior.Auto); try { var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); return authResult; } catch (AdalException e) { return null; } }
我传入上述方法的变量:
string authority = "https://login.windows.net/common"; string ResourceID = "Backend ClientId";//Backend (web app) string clientId = "Native App ClientId";//native app string returnUri = "https://{My Azure Site}.azurewebsites.net/.auth/login/done";
如果你想在Xamarin.Forms中这样做,下面是我的GitHub解决方案的链接,我通过DependencyService
公开了这些方法。
我希望这有帮助! 如果您的响应中出现任何错误,请检查以确保您在Azure中正确设置了权限。 我是这样做的 。 另一个很好的资源是Adrian Hall的Xamarin / Azure书
编辑:添加了UWP的东西
如果你要做的就是像你一样调用Azure API,那么你应该做一些不同的事情。
- 在Azure AD中创建具有访问Azure API权限的应用程序
- 如果要调用Service Management API,请将其添加为权限
- 您也可以使用管理证书
- 如果要调用Resource Management API,请通过新Portal添加服务主体所需的权限
- 如果要调用Service Management API,请将其添加为权限
- 如果您为Service Management API选择了委派方式(第一个选项),那么您将必须:
- 让用户使用授权代码授权流程对Azure AD进行身份validation
- 或者使用密码授权流程获取访问令牌(您可以在另一个答案中看到此示例)
- 如果您选择管理证书或授予服务主体权限,则可以使用客户端凭据授予流程直接从Azure AD获取访问令牌
最后,您将始终使用可用于调用API的访问令牌。
上述就是C#学习教程:AuthenticationContext.AcquireTokenAsync是C#的新手分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1040554.html