1

Я хочу, чтобы мое приложение принимало токены OAuth при размещении на сайтах Azure. У меня есть следующие:Почему мой сайт Azure не принимает токены OAuth?

web.config веб-приложения

<appSettings> 
    <add key="ida:Realm" value="https://example.com/development" /> 
    <add key="ida:AudienceUri" value="https://example.com/development" /> 
    <add key="ida:Tenant" value="example.com" /> 
</appSettings> 

Startup.cs из веб-приложения

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Microsoft.AspNet.SignalR; 
using Microsoft.Owin; 
using Owin; 
using Microsoft.Owin.Security.ActiveDirectory; 
using System.Configuration; 
[assembly: OwinStartup(typeof(MyApplication.Web.Startup))] 

namespace MyApplication.Web 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     {  
      ConfigureAuth(app); 
     } 

     public void ConfigureAuth(IAppBuilder app) 
     { 
      app.UseWindowsAzureActiveDirectoryBearerAuthentication(
       new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
       { 
        TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters() 
        { 
         ValidAudience = ConfigurationManager.AppSettings["ida:AudienceUri"] 
        }, 
        Tenant = ConfigurationManager.AppSettings["ida:Tenant"] 
       }); 
     } 
    } 
} 

Main.cs

using Microsoft.IdentityModel.Clients.ActiveDirectory; 
using System.Globalization; 
using System.Net.Http; 
using System.Net.Http.Headers; 

void Main() 
{ 
    var clientId = @"GUIDGUIDGUID"; 
    var key = @"KEYKEYKEYKEYKEY"; 
    var aadInstance = "https://login.windows.net/{0}"; 
    var tenant = "example.com"; 
    var authContext = new AuthenticationContext(String.Format(CultureInfo.InvariantCulture, aadInstance, tenant), true); 
    var credential = new ClientCredential(clientId, key); 
    authContext.TokenCache.Clear(); 
    var token = authContext.AcquireToken(@"https://example.com/development", credential); 
    using (var client = new HttpClient()) 
    { 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken); 
     var response = client.GetAsync(@"https://app.example.com/").Result; 
     var responseText = response.Content.ReadAsStreamAsync().Result; 
     Console.Write(new StreamReader(responseText).ReadToEnd()); 
    } 
} 

Может кто-нибудь дать некоторые ориентиры ?

+0

Я предполагаю, что вы можете получить правильный токен, правильно? Какой код ошибки вы получаете от службы? В общем, я не вижу причин для отказа этого кода. Можете ли вы получить доступ к своей службе, разрешая анонимный доступ к любому методу? Кстати, вы используете устаревшую конечную точку маркера, хотя это не может быть причиной (https://login.microsoftonline.com/{0} является новой). – Igor

+0

@Igor Он только начал работать этим утром ... Наверное, мне пришлось немного посидеть. Спасибо, что подняли голову о старой конечной точке – CamronBute

ответ

0

Получается, что я использовал класс Uri для проверки URI идентификатора приложения. Проблема в том, что она добавляет конечную косую черту к концу, что вызывает проблемы. Как только я начал использовать класс string для хранения URI идентификатора приложения, все было в порядке.

Поэтому убедитесь, что вы используете именно те значения, которые видны в Azure AD!

 Смежные вопросы

  • Нет связанных вопросов^_^