भेजते समय मैंने ओएथ इन सी # के साथ वेब एपीआई की सुरक्षा के लिए एक ट्यूटोरियल का पालन किया है।एपीआई एंड पॉइंट लौटने "इस अनुरोध के लिए प्राधिकरण से इनकार कर दिया गया है।" जब बेयरर टोकन
मैं कुछ परीक्षण कर रहा हूं और अब तक मैं /token
से सफलतापूर्वक पहुंच टोकन प्राप्त करने में सक्षम हूं। मैं इसका परीक्षण करने के लिए "उन्नत रीस्ट क्लाइंट" नामक क्रोम एक्सटेंशन का उपयोग कर रहा हूं।
{"access_token":"...","token_type":"bearer","expires_in":86399}
यह है कि मैं क्या /token
से वापस पाने के लिए है। सब कुछ अच्छा लग रहा है।
मेरा अगला अनुरोध अपने परीक्षण एपीआई नियंत्रक के लिए है:
namespace API.Controllers
{
[Authorize]
[RoutePrefix("api/Social")]
public class SocialController : ApiController
{
....
[HttpPost]
public IHttpActionResult Schedule(SocialPost post)
{
var test = HttpContext.Current.GetOwinContext().Authentication.User;
....
return Ok();
}
}
}
अनुरोध एक POST
है और शीर्ष लेख है:
Authorization: Bearer XXXXXXXTOKEHEREXXXXXXX
मैं: Authorization has been denied for this request.
JSON में लौट आए।
मैंने एक जीईटी करने की भी कोशिश की और मुझे उम्मीद है कि मैं क्या उम्मीद करूंगा, कि विधि समर्थित नहीं है क्योंकि मैंने इसे लागू नहीं किया है।
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
context.Validated();
}
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
using (var repo = new AuthRepository())
{
IdentityUser user = await repo.FindUser(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
identity.AddClaim(new Claim(ClaimTypes.Role, "User"));
context.Validated(identity);
}
}
किसी भी मदद की बहुत अच्छा होगा:
यहाँ मेरी प्राधिकरण प्रदाता है। मुझे यकीन नहीं है कि यह अनुरोध है या कोड गलत है।
संपादित करें: यहाँ है मेरी Startup.cs
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
ConfigureOAuth(app);
}
public void ConfigureOAuth(IAppBuilder app)
{
var oAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider()
};
// Token Generation
app.UseOAuthAuthorizationServer(oAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
}
यदि आप पाइपलाइन में वेबएपी पंजीकृत नहीं कर रहे हैं तो आप यह कैसे करेंगे? मैं सिर्फ डिफ़ॉल्ट वेब एपीआई टेम्पलेट के साथ काम कर रहा हूं। अनुरोध ठीक करें, POST अनुरोध मुझे 401 दें। टोकन एक जैसा है। – mwijnands
यह मुझे पकड़ा! इस उत्तर को पोस्ट करने के लिए समय निकालने के लिए धन्यवाद। – heymega
इस मुद्दे के कारण खोजने का प्रयास करने के बाद मैंने कुछ घंटों बर्बाद कर दिए। – Tomino