Хорошо, ооочень, я неправильно понял идею о конечных точках, я думаю .. Я новичок в Голанге (~ год) ..
Я хотел написать что-нибудь о том, что я нашел и как обезопасил свой API.
Первым шагом будет выполнение инструкций пакета go-endpoints о том, как зарегистрироваться и обнаружить api по адресу: https://github.com/GoogleCloudPlatform/go-endpoints. Этот пакет является наиболее близким к конечным точкам движка приложений Google, использующим Java или Python ..
Теперь предположим, что api подключены и доступны для обнаружения. если мы не будем использовать oauth2 для защиты api, они будут обнаружены и предоставят доступ всем пользователям ... и это то, что я хотел бы одобрить только в моем общедоступном API, а не в моем частном ... поэтому я попробовал сеанс гориллы, думая, что это решит моя проблема ..
Что я сделал, так это попытался прослушать входящие вызовы api, обернув промежуточным программным обеспечением все вызовы маршрутов, передающие "/ _ah / api / ....", вы можете себе представить ... мне потребовалась целая вечность, чтобы понять, что этот путь зарезервирован для google api и что я могу делать то, что пытался ... в конце концов ... я получил это ... тесто позже, чем когда-либо ...
Так что к делу, после того, как вы раскрыли API, дайте ему имена и все, что вы должны использовать info.ClientIds, info.Scopes.
пример кода ---->
const (
dummyClientID = "google appengine client id"
dummyScope1 = "https://www.googleapis.com/auth/plus.login"
dummyScope2 = "https://www.googleapis.com/auth/plus.me"
dummyScope3 = "https://www.googleapis.com/auth/userinfo.email"
dummyScope4 = "https://www.googleapis.com/auth/userinfo.profile"
dummyAudience = "people"
)
var (
emptySlice = []string{}
clientIDs = []string{dummyClientID} // this is the clientId of the project
scopes = []string{dummyScope1,dummyScope2,dummyScope3,dummyScope4} // >this are the req oauth2 scopes that the user hase to approve.
audiences = []string{dummyAudience} // this is only for android !
)
info := manageApi.MethodByName("GetBusinessById").Info()
info.Name, info.HTTPMethod, info.Path, info.Desc = "GetBusinessById", >"POST","GetBusinessById", "Get the business if bid is sent."
info.ClientIds, info.Scopes = clientIDs, scopes
теперь все, что осталось сделать, это создать функцию api endpoint.NewContext и запросить соответствующую область видимости для получения user.User ..
func (ms *ManageService) GetBusinessById(r *http.Request, req >*JsonInGetBusinessById, resp *JsonOutEditBusiness) error {
// go get the business by bid.
DalInst := ManageDataAccessLayer.DALManagerFactory()
context := endpoints.NewContext(r)
u,err := >context.CurrentOAuthUser("https://www.googleapis.com/auth/userinfo.email")
if err != nil {
return err
}else {
var businessObj = DalInst.GetBusinessByBid(context, req.BidStr)
resp.BidStr = u.Email //just for testing to see if the client is auth and >we can get client Email..
resp.NameStr = businessObj.NameStr
resp.AddressStr = businessObj.AddressStr
resp.DescriptionStr = businessObj.DescriptionStr
resp.DescriptionTwo = businessObj.DescriptionTwo
resp.PhoneNumberStr = businessObj.PhoneNumberStr
return nil
}
хорошо .. надеюсь, я кое-что прояснил!
person
Jonathan Pick
schedule
24.03.2015